草庐IT

java - 无法将列表转换为 Java 泛型中的列表错误

以下是我简化的图形实现importjava.util.ArrayList;importjava.util.List;publicclassTreeNode>{privateEdata;privateList>children;publicTreeNode(Evalue){data=value;children=newArrayList();}publicEgetData(){returndata;}publicvoidsetData(Edata){this.data=data;}publicList>getChildren(){returnchildren;}publicvoidset

java - java中的简单泛型列表

为什么java泛型如此棘手?我以为我终于明白了,但是eclipse使用下面的任一getOuterList方法在下面的somOtherMethod的行中给我一个错误。protectedListgetOuterList(){//blahblah}protectedListgetOuterList(){//blahblah}protectedvoidsomeOtherMethod(){...getOuterList().add((MyObject)myObject);//compileerror...}更新:好的-我现在明白错误了。我对什么缺乏理解List或List真正意思。在前一种情况下,

java - map 和泛型的 map

我想创建map的(递归)map。即Map的type的值是另一个与外层map同类型的Map。例如:Map>>>foo;显然,为了做到这一点,我需要一些方法来引用“正在定义的类型”或其他东西。我想我可以这样做:Map>...然后只是@SupressWarnings("unchecked")我自己通过了不可避免的警告,但是有更好的方法吗? 最佳答案 创建一个辅助类或接口(interface)来引用“正在定义的类型”。像这样:classMyMapextendsHashMap{...}或interfaceMyMapextendsMap{}(我

java - 如何处理 Java "annotation processor"中的泛型?

我之前问过一个例子“注释处理器”,它会为一个接口(interface)生成一个代理/委托(delegate),但没有得到答案,也没有在互联网上找到任何东西,所以我自己做了一个。到目前为止它运行良好,直到我尝试在super接口(interface)中使用泛型。如果我在带注释的界面中使用泛型,它工作正常(更多是偶然而不是设计)。但是,如果带注释的接口(interface)扩展了另一个采用通用类型参数的接口(interface),则该参数不会“绑定(bind)”到带注释的接口(interface)在扩展super接口(interface)时使用的类型。示例:publicinterfaceTe

java - 带 <?> 或不带 <?> 的泛型实例

我对Java中的泛型和instanceof有疑问运算符。不可能进行这样的instanceofcheck:if(arginstanceofList)//immposibledueto//loosingparameteratruntime但是可以运行这个:if(arginstanceofList)现在我的问题来了-之间有什么区别arginstanceofList和arginstanceofList? 最佳答案 JavaGenerics是通过erasure实现的,也就是说,额外的类型信息()在运行时将不可用,而是被编译器删除。它有助于进行

java - 无法使用通配符编译相关的 Java 泛型参数

由于不明确的推理,以下Java小示例无法编译:packagegenericsissue;importjava.util.ArrayList;importjava.util.List;interfaceAttribute{}interfaceListAttributeextendsAttribute>{}publicclassContext{public>voidput(Classattribute,Tvalue){//implementationdoesnotmatterfortheissue}publicstaticvoidmain(String[]args){Contextctx=

java - 枚举如何管理泛型?

我有一个参数化接口(interface):publicinterfaceMyInterface{voidrun(Te);}和实现接口(interface)的类:publicclassMyClass1implementsMyInterface{publicvoidrun(SomeOtherClass1e){//dosomestuffwithe}}publicclassMyClass2implementsMyInterface{publicvoidrun(SomeOtherClass2e){//dosomestuffwithe}}不同的MyClass*X*的数量是已知的并且是详尽的,并且每

java - 上限泛型 VS 父类(super class)作为方法参数?

据我所知,使用上限泛型和使用父类(superclass)作为方法参数都接受相同的可能参数。哪个是首选,两者之间有什么区别(如果有)?上限泛型作为参数:publicvoiddoSomething(Tfoo){}父类(superclass)作为参数:publicvoiddoSomething(Foofoo){} 最佳答案 这是一个上限类型参数。使用super创建下限,你不能真正为类型参数做。Youcan'thavealowerboundedtypeparameter.这会有所不同,例如,如果您想要传递List.因此,对于以下两种方法:p

Java 8 对泛型方法的调用不明确

这个问题在这里已经有了答案:Javatypeinference:referenceisambiguousinJava8,butnotJava7(2个答案)关闭6年前。我正在将Java7代码移植到Java8,我遇到了以下问题。在我的代码库中,我有两种方法:publicstaticImmutableSetappend(Setset,Telem){returnImmutableSet.builder().addAll(set).add(elem).build();}publicstaticImmutableSetappend(Setset,SetelemSet){ImmutableSet.B

java - 泛型 - 下限/上限通配符行为?

这个问题在这里已经有了答案:WhatisPECS(ProducerExtendsConsumerSuper)?(16个答案)关闭5年前。我正在尝试了解下限和上限通配符的行为。尝试编译以下代码时遇到问题。Collectionc=newArrayList();c.add(newObject());//Compiletimeerror为了弄清楚这个问题,我也简单地尝试了下界通配符。幸运或不幸的是,代码编译得很好,但造成了很多困惑。Collectionc=newArrayList();c.add(newObject());//Compilesfine有人可以向我解释一下这两个代码片段是如何工作