网页学习体会

  • 首页
  • 个人博客
您的位置: 首页  >  IT文章  >  Class与Class<>有何差异

Class与Class<>有何差异
分类: IT文章 • 2024-11-10 10:24:36
Class<Object>与Class<?>有何区别

最近在项目中写了一些底层的公共方法,写公共方法不同于写普通方法,有很多的参数都是不具体的指明某个类或者对象的,所以只能用object,class等这些通用的东西代替,所以在做的同时也学习了一些基础的东西。可能很多人已经觉得这很基础了,不过由于没有亲自在项目中写过这些公共的内容,对这些细节思考的还是很少的,现在分享一下自己的一点小收获。


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?”


原文参考:http://blog.sina.com.cn/s/blog_56d8ea90010118dv.html

1楼u013036688昨天 19:40
道理能看懂,代码看不懂。。嘿嘿

相关推荐

  • Class与Class有何区别呢
  • typename与class的差异
  • Class与Class<>有何差异
  • Java中Class与Class<>其间有何区别
  • 【python系统学习13】类(class)与对象(object)
  • 高手请听题:错误提示中的路径a.b.Class与a/b/Class 有什么不同
  • TPersistentClass类与Class类有何差别
  • _PHP_Incomplete_Class Object 与序列化unserialize
  • UserControl.Resources与phone:PhoneApplicationPage.Resources有何差异
  • 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
  • Hdoj 2200 Eddy's AC难点 【数学】
  • libsvm Minist Hog 手写体辨别
    • 网站免责声明 网站地图 最新文章 用户隐私 版权申明
    本站所有数据收集于网络,如果侵犯到您的权益,请联系网站进行下架处理。   

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