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

我是Generic的新手,我的问题是:两个函数之间有什么区别:


功能1:


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


}

功能2:


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


}


慕虎7371278
浏览 283回答 3
3回答

森林海

泛型使集合更安全。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中检查引用。

慕尼黑8549860

我通常会解释< E >和< ?之间的区别。>通过与逻辑量化(即通用量化和存在量化)进行比较。对应于“ forall E,...”对应于“存在某物(用表示),使得...。”因此,以下通用方法声明意味着,对于所有类类型E,我们定义funct1public static <E> void funct1&nbsp; (List<E>; list1) {}以下通用方法声明意味着,对于某些现有类,用< ?>,我们定义funct2。public static void funct2(List<?> list) {}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java