为了账号安全,请及时绑定邮箱和手机立即绑定

通用类型和通配符类型之间的区别

通用类型和通配符类型之间的区别

慕虎7371278 2019-12-12 14:10:54
我是Generic的新手,我的问题是:两个函数之间有什么区别:功能1:public static <E> void funct1  (List<E> list1) {}功能2:public static void funct2(List<?> list) {}
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

泛型使集合更安全。


List<E>:E这里是Type Parameter,可以用来确定列表的内容类型,但是有No一种方法可以检查期间的内容runtime。


Generics are checked only during compilation time.

<? extends String>:这是Java专门内置的,用于处理Type Parameter的问题。"? extends String"表示此列表可以具有


objects which IS-A String.

例如:


动物类狗类扩展动物老虎类扩展动物


因此, "public void go(ArrayList<Animal> a)"将“ NOT accept狗”或“老虎”作为其内容而不是“动物”。


"public void go(ArrayList<? extends Animal> a)" 需要做些什么 ArrayList take in Dog and Tiger type.


在Head First Java中检查引用。



查看完整回答
反对 回复 2019-12-13
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我通常会解释< E >和< ?之间的区别。>通过与逻辑量化(即通用量化和存在量化)进行比较。


对应于“ forall E,...”

对应于“存在某物(用表示),使得...。”

因此,以下通用方法声明意味着,对于所有类类型E,我们定义funct1


public static <E> void funct1  (List<E>; list1) {


}

以下通用方法声明意味着,对于某些现有类,用< ?>,我们定义funct2。


public static void funct2(List<?> list) {


}



查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 282 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信