草庐IT

Generics

全部标签

java - 为什么 "cannot select from a type variable"

我有以下类(class):publicabstractclassA{publicStringatt;publicstaticabstractclassBuilder{publicTa;publicabstractTbuild();publicT.BuildersetAtt(Stringa){this.a.att=a;returnthis;}}}publicclassA1extendsA{publicstaticclassBuilderextendsA.Builder{publicBuilder(){this.a=newA1();}publicA1build(){returnthis.a

Java 泛型 - 方法签名的上限

这个问题在这里已经有了答案:Typeparametervsunboundedwildcard(1个回答)关闭7年前。我有一个方法,我想在其中接受必须扩展抽象类的类类型。有什么区别voidmyMethod(Classclazz);和voidmyMethod(Classclazz);?在第二种情况下,我无法直接引用方法内部的类型。可以将哪些类类型传递给这两种方法有什么不同吗?

Java 泛型 : Bound mismatch

我有一个具有此定义的通用类:publicclassAcoProblemSolver>>{AntColony是这样走的:publicabstractclassAntColony>{Ant是这样的:publicabstractclassAnt{我希望以这种方式扩展AntColony:publicclassFlowShopProblemSolverextendsAcoProblemSolver{但是Eclipse在FlowShopAntColony参数类上显示错误:Boundmismatch:ThetypeFlowShopAntColonyisnotavalidsubstituteforth

Java:方法参数中的协变通配符边界

我对通配符边界的规则感到困惑。好像有时候声明一个bound不满足类声明的bound的方法参数是可以的。在下面的代码中,方法foo(...)可以正常编译,但bar(...)不能。我不明白为什么允许其中任何一个。publicclassTestSomething{privatestaticclassA{}publicstaticvoidfoo(A>a){}publicstaticvoidbar(A>a){}} 最佳答案 让我们首先考虑方法voidfoo(A>a).A>与A“兼容”因为存在通配符类型P,和一个类似的通配符类型Q满足以下条件:

java - 通用混沌Java

我使用两个接口(interface):publicinterfaceReceiver{publicvoidreceive(Tobj);publicSet>getInterests();}publicinterfaceDistributorextendsReceiver{publicvoidregister(Receiverreceiver);}我想在Distributor中注册一个Distributor的问题,例如Distributor==注册==>Distributor我的第一个想法是将注册方法更改为register(Receiverreceiver).但是,如果我想获取类,接收方对

Java - 获取泛型对象作为 String 泛型类型抛出异常

publicclassBox{privateTelement;publicTgetElement(){returnelement;}publicvoidsetElement(Telement){this.element=element;}}publicclassTest{publicstaticvoidmain(String[]args){Listl=newArrayList();//JustListofBoxwithnospecifictypeBoxbox1=newBox();box1.setElement("aa");Boxbox2=newBox();box2.setElement

java - 类型化数组是否有助于 JIT 更好地优化?

我的问题如下:Java代码通常会像这样实现泛型集合:publicclassGenericCollection{privateObject[]data;publicGenericCollection(){//Backingarrayisaplainobjectarray.this.data=newObject[10];}@SuppressWarnings("unchecked")publicTget(intindex){//Andwejustcasttoappropriatetypewhenneeded.return(T)this.data[index];}}例如这样使用:for(MyO

java - 如何让 Comparator.comparing 正确推断类型参数?

我有以下类(class):importjava.util.ArrayList;importjava.util.Comparator;importjava.util.List;importorg.apache.commons.lang3.tuple.Pair;publicclassSorter{privateList>dtoPairs=newArrayList();publicSorter(){Comparator>bySize=Comparator.comparing(Pair::getLeft);Comparator>byName=Comparator.comparing(p->p.

Java 循环泛型

当存在循环关系时,如何获得一组类的类型安全性。我有3个类,路由器、交互器和组件,这样abstractclassRouterabstractclassInteractorabstractclassComponent我想确保特定的路由器绑定(bind)到特定的组件和特定的交互器。编辑应用程序的架构确保我们为1个组件的1个交互器提供了1个路由器。一些重用是可能的,但如果路由器A与交互器A和组件A一起使用,它将始终是这样,否则我们将定义路由器B与交互器A和组件B。编辑2一个更具体的例子:我们可以拥有包含loginscreenrouter、loginscreeninteractor和logins

Java 泛型问题 - Class<T> 与 T?

我正在使用Hibernatevalidator并尝试创建一个小实用程序类:publicclassDataRecordValidator{publicvoidvalidate(Classclazz,TvalidateMe){ClassValidatorvalidator=newClassValidator(clazz);InvalidValue[]errors=validator.getInvalidValues(validateMe);[...]}}问题是,为什么我需要提供Classclazz执行时的参数newClassValidator(clazz)?为什么不能指定:T如ClassV