Tag: 通配符

java通用和外卡

在javagenerics中我理解了外卡,超级和扩展的含义是什么,但是没有得到为什么不允许我添加任何内容,为什么允许我在层次结构中添加SomeType,但不在层次结构中的上面? class Animal {} class Cat extends Animal{} 下面的方法可以采取动物或动物的子列表即猫,但没有别的和我不允许添加任何东西,如果尝试添加,编译器阻止我为什么? void addAminal(List aList){ aList.add(new Cat()); // compiler error aList.add(new Animal()); // compiler error } 现在下面的方法可以采用Animal的任何列表或者任何超类型的Animal,但是没有子类型的Animal,我可以在Animal或者层次结构中添加更低的对象,所以当我尝试添加Object时,编译器会抱怨为什么? void addAnimal(List aList){ aList.add(new Animal()); // no error aList.add(new Cat()); // no error aList.add(new Object()); // compiler error why ? } 谢谢Arya

什么是多级外卡? 语法混乱

我正在阅读AngelikaLangerGenericsFaq的多级外卡。 我对语法很困惑。 该文件说 Collection<Pair>是genericsCollection接口的具体实例。 它是不同类型对的异构集合。 它可以包含Pair , Pair , Pair , Pair等类型的元素,依此类推。 换句话说, Collection<Pair>包含不同类型的Pairforms的混合对。 类型Collection<? extends Pair> Collection<? extends Pair>是一个通配符参数化类型; 它不代表具体的参数化类型。 它代表集合系列中的代表,它是Collection接口的实例化,其中type参数的forms为Pair 。 兼容的实例化是Collection<Pair> , Collection<Pair> , Collection<Pair>或Collection<Pair> 。 换句话说,我们不知道它所代表的Collection的实例。 根据经验,您必须从上到下阅读多级通配符。 我对以下几点感到困惑。 有人可以用例子详细说明这三个引号。 我完全迷失在语法中 文件说,para-1是generics类型的具体实例,而其他不是具体的实例化? 那个怎么样? 自上而下阅读外卡是什么意思? 多级外卡有什么优势? 有人可以详细说明这些要点。 谢谢。

使用带通配符的通用映射的问题

我有一个方法返回定义为的map : public Map getData(); 这个方法的实际实现对我来说并不清楚,但是,当我尝试这样做时: obj.getData().put(“key”,”value”) 我得到以下编译时错误消息: 方法put(String,capture#9-of?)在Map类型中不适用于参数(String,String) 问题是什么? String不是什么类型的? 提前致谢。

Javagenerics“捕获?”

我正在使用TreeTable ,在更换单元工厂时,我需要通过一个 Callback<TreeTableColumn, TreeTableCell> A是我正在使用的课程,但我不知道如何处理“捕获?” 我试图创造 new Callback<TreeTableColumn, TreeTableCell> 但IDEA显示出警告 setCellFactory(Callback<TreeTableColumn<A, capture>, TreeTableCell<A, capture>>) in TreeTableColumn cannot be applied to (anonymous Callback<TreeTableColumn, TreeTableCell>) 我尝试使用特定的类(如String)而不是“?” 同样,但没有任何帮助。 谁能向我解释如何使用它? 谢谢。 编辑: 我收集了更多信息.. TreeTableColumn的CellFactory应该是Callback<TreeTableColumn , TreeTableCell> ,但是,我正在使用的TreeTableColumn被创建为原始类型(在库中)。 使用原始类型回调有效。 但有没有其他选择如何解决这个问题?

Javagenerics,未绑定的通配符 vs

我已经阅读了一些主题,这些主题涵盖了关于generics的某些问题,例如它们与原始类型的关系 。 但是我想对Java SE教程中关于未绑定generics的特定行进行补充说明。 根据一句话: printList的目标是打印任何类型的列表,但它无法实现该目标 – 它只打印一个Object实例列表; 它不能打印List ,List ,List 等,因为它们不是List 的子类型。 如果我理解这句话; List和List之间的区别在于我们可以通过实现前者来使用类型参数List或List 。 如果我们实现后者,我们只能使用类型参数List 。 好像List是Object的上限,即List List 。 但是后面的句子让我感到困惑,因为根据我之前的理解, List应该只包含Object类的实例而不包含其他内容。 重要的是要注意List和List是不一样的。 您可以将Object或Object的任何子类型插入List 。 但是你只能在List插入null 。

Javagenerics,嵌套的通配符集合

编译(1.6) List l = new ArrayList(); 但事实并非如此 List<List> ll = new ArrayList<List>(); 有错误的 Type mismatch: cannot convert from ArrayList<List> to List<List> 有人可以解释原因吗? 谢谢 编辑:编辑为后续

Java中未绑定的通配符generics的用途和要点是什么?

我不明白未绑定的通配符generics的用途是什么。 带有上边界的绑定通配符generics 非常有意义,因为使用多态,我可以使用该类型或集合。 但是具有任何类型的generics有什么意义呢? 它不会破坏仿制药的目的吗? 编译器没有发现任何冲突,在类型擦除后,就像没有使用generics一样。

在java类路径中使用通配符

我正在运行一个应该执行main方法的shell脚本: java -classpath /path/to/app/conf/lib/nameJar* com.example.ClassTest 在这一点上,我得到了这个例外: Exception in thread “main” java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext at java.net.URLClassLoader$1.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:303) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 这是因为弹簧jar位于另一个文件夹中。 所以我改变了脚本: java -classpath /path/to/app/conf/lib/nameJar*:/path/to/app/lib/spring* com.example.ClassTest 但是使用此脚本,无法找到com.example.ClassTest。 关于这个问题的任何想法? 提前致谢

generics,类型参数和通配符

我试图理解javagenerics,它们似乎很难理解。 例如,这很好…… public class Main { public static void main(String[] args) { List list = null; method(list); } public static void method(List list) { } } ……就这样…… public class Main { public static void main(String[] args) { List<List> list = null; method(list); } public static void method(List list) { } } … 和这个 … public […]

仿制药的仿制药如何运作?

虽然我确实理解了generics的一些角落情况,但我遗漏了以下示例的内容。 我有以下课程 1 public class Test { 2 public static void main(String[] args) { 3 Test t = new Test(); 4 List<Test> l =Collections.singletonList(t); 5 } 6 } 第4行给出了错误 Type mismatch: cannot convert from List<Test> to List<Test>`. 显然,编译器认为不同? 并不是真的平等。 虽然我的直觉告诉我,这是正确的。 任何人都可以提供一个例子,如果第4行合法,我会得到运行时错误吗? 编辑: 为了避免混淆,我通过具体的赋值替换了第3行中的=null