如何使用Java泛型方法


这篇“如何使用Java泛型方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用Java泛型方法”文章吧。一般定义如下,即方法的前面加了个三种泛型参数推断方式:1、直接在f()前面加确定泛型2、通过输入参数确定, 下面这个推断为Integer3、可通过返回值确定Q: 下面这段代码哪里有问题? 是toString()那里吗?A:test是static方法, 因此无法感知A实例里的T
需要改成
public static void test(T t)
toString()那里没问题,toString就是Object的方法。Q: 泛型参数T在运行时,会变成什么?
A: 统一变成Object且不包含任何类型信息。Q: 泛型参数T可以可以使用instanceof做比较吗?A: 不能,编译器会报错。Q: 泛型参数T可以进行new T()或者new T[]操作吗?
A: 不能,编译器会报错。Q: 能调用泛型参数对象里的方法吗?A: 只能调用Object的方法。Q: 可以用T做强制转化吗?A: 能运行, 但不会真正发生转型, 编译时会触发waring警告。先假定有2个类, 基类Parent 和子类Child回答以下问题:
Q:下面这句话有问题吗?A:有问题,编译就错误了。 List和ArrayList并不存在父子类的关系Q:这个list有什么特点?A:这个list可以调用A a = list.get(), 但是不能list.add(new Parent())原因:
list.get()所做的操作是在返回时, 把内部的 extend Parent> 强转成Parent, 是合理的,任何Parent的子类都可以转成Parent
list.add(new Parent())所做的操作是在输入时, 把外部的A转成内部的 extend Parent>, 这是不合理的,因为我们不知道这个Parent对象可以转成哪个Parent的子类。Q:这个list有什么特点?
下面谁会报错A:截图如下:Child c = list.get() 或者Parent p = list.get()所做的操作是在返回时, 把内部的 super Child> 强转成外部的Parent或者child, 是不合理的, 因为编译器觉得child的父类不一定能转成parent或者child,所以禁止了这种行为( 比如parent的父类是object, 但object不一定就能转成parent或者child)。*list.add(new Child())所做的操作是在输入时, 把外部的child或者parent转成内部的 super Child>, 这是合理的,因为child和parent一定能转成child的父类。Q:这个list有什么特点?A:get和add都不行,只能做remove等无返回值无输入A的操作。
PS: 注意,不是说不能调用get或add方法, 而是调用get或add时,不能使用A这个对象去操作。
即无法做add(A) 或者 A a = get(0)
但是可以做add(object) 或者Object o = get(0) 香港云主机
因为?可以转为Object, 但是无法转为A。Q:下面这个代码会报错吗?A:不会报错。会正常打印结果。PECS原则
注意PECS原则和上面的区别!
上面之前提到的? extend或者? supert, 都是在声明对象的时候用的。
而PECS原则是用于泛型对象的方法输入参数!假设有一个类定义如下:则T就是泛型参数。Q:下面代码能正常运行吗?A:不能正常运行, pushList和pollList都会报错因为编译器检查后,认为 List和List不是一个东西!Q: 如果上文要支持pushList,应该怎么修改pushList方法的定义?
A:改成这样:即编译器认为,List 和List extend Number>是一个东西,允许!Q: 如果要支持pollList,怎么修改定义?
A:因为是把自己的东西塞给输入参数, 而想要能塞进去,必须保证自己这个T,是输入参数的子类,反过来说,输入参数必须是T的父类,所以用super
于是编译器认为,List和List super Number>是一个东西,允许!PECS原则出自Effective Java, 注意只是一个编程建议而已!如果有一个类A,泛型参数为T如果他一般只用于接收输入容器List后,塞入自己内部的T容器, 则类A就叫生产者, 因此输入参数最好定义为 extend T>最好, 以便能接收任何T子类的容器。如果他一般只用于接收输入容器后List, 把自己内部的T元素塞给它, 那么这个类A就叫消费者, 输入参数最好定义为 super T> 最好, 以便自己的T元素能塞给任何T元素的父类容器。以上就是关于“如何使用Java泛型方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注开发云行业资讯频道。

相关推荐: r语言性别质控的方法

这篇“r语言性别质控的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“r语言性别质控的方法”文章吧。「原理:」检查性别差异。先验信息,女性的受…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/03 21:20
下一篇 07/03 21:20

相关推荐