网页学习体会

  • 首页
  • 个人博客
您的位置: 首页  >  IT文章  >  Class与Class有何区别呢

Class与Class有何区别呢
分类: IT文章 • 2025-01-05 14:32:32

1、? 和 Object 差不多,不过还是有差别。
在这种情况下: class<? extends SomeClass> , Object就不能用了

Object是一个具体的类名,而?是一个占位符号,表示任何类型,只要是SomeClass类或者子类就可以。
List<Object>可以放任何类对象
List<? extends InputStream>就只能放InputStream的实现类了。

运行时刻,没错,Java的泛型是不存在,所以说,效率没有任何影响。

2、泛型中使用通配符?代表类型参数可以是任何对象类型,也可以使用extends表示参数类型可以是某类或其子类,参数类型主要是用于解决早期版中集合取数据时的拆箱操作

3、Java中的泛型是个假泛型,仅仅只是在编译器那边做了语法检查而已,和C#里的泛型不一样的。基本上,不管你在List<>里面写什么类型,编译通过了以后运行时全部都是Object。

4、如果方法参数声明为:
public Page(int start, int totalSize, int pageSize, List<Object> data) {
则构造函数第四个参数传入List<String>,会编译报错。

说明:Java泛型确实是通过类型擦除实现的,编译器的语法检查是次要的,重要的是泛型系统可以为我们做更多的类型检查,这在很多时候是很有帮助的,借助编译器在编译期的类型检查可以减少运行时出现类型错误的几率。

比如foo方法把一个Object对象加入List中,我们期望这个List可以存放任何类型的对象。

如果用原生类型List,就像这个方法,void foo(List list, Object o)

我们可以这么调用foo:

List<Integer> integers = new ArrayList<Integer>();

foo(integers, "bar")

这段代码是可以编译通过的,编译器会有一个警告,但事实上我们并不希望允许这样调用foo,我们的本意是foo的第一个参数是一个可以存放任何类型对象的List,但integers显然不是的。

但如果我们的foo方法是这样子的,void foo(List<Object> list, Object o)

现在如果我们尝试这样子调用foo,就会产生编译错误

List<Integer> integers = new ArrayList<Integer>();

foo(integers, "bar")

编译器的类型检查让我们提前发现了问题,而不是等到程序运行抛出异常时才想到,“嘿,你怎么能这么调用foo?”

相关推荐

  • Class与Class有何区别呢
  • Class与Class<>有何差异
  • Java中Class与Class<>其间有何区别
  • 在工程中引用ado组件时,引用 tlb 文件与引用 dll 文件有何本质区别呢?解决方案
  • TPersistentClass类与Class类有何差别
  • swift Swift学习笔记--Array篇 Swift利用反射获取对象属性列表 good Swift获取对象(Object)类型(Class) Swift常用内置函数介绍 Swift中结构体(Struct)和类(Class)的区别 Swift Mirror 类型实践 —— 快速将类转换为 Json Swift反射API及其用法 好详细 Swift json字典转模型 项目记录  简洁 Swift开发第二篇——extension及fatalError KVC之-setValue:forKey:方法实现原理与验证 没想到Swift里KVC还能有坑 你TM能不能告诉我xcode7.0的是swift什么版本 使用Swift 字典模型互转 就是这么简单 good  Dict2Model_Demo  swift 3.0 json解析、字典转模型三种方案 Swift学习笔记(三十一)——参数的默认值 Swift 4.0:访问级别(访问控制) swift public、internal和private Swi
  • JavaScript中self与this均是指自前对象,是吗?那两者有何区别呢?该怎么解决
  • Object C语法学习笔记(二) 1、@property与@synthesize配对使用。 2、强引用(__strong)和 弱引用(__weak) 3、点表达式,可以用来访问对象,类似C语言的结构体访问。 4、什么是Category 5、Class Extension(类扩展) 6、判断对象类型 7、尖括号的含义 8、self和self class指针的区别 9、@optional和@required
  • WebApp与Native App有何区别呢?
  • 抽象类(abrstract class)与接口(interface)有何异同
  • Oracle SQL基本操作
  • linux命令之ps命令
    • 网站免责声明 网站地图 最新文章 用户隐私 版权申明
    本站所有数据收集于网络,如果侵犯到您的权益,请联系网站进行下架处理。   

    Copyright © 2018-2021   Powered By 网页学习体会    备案号:   粤ICP备20002247号