草庐IT

Generics

全部标签

java - Java 中 <T> 和 <T extends Object> 有什么区别?

这个问题在这里已经有了答案:What'sthedifferencebetweenandinJavaGenerics?(3个答案)关闭7年前。在Java泛型中,使用classGenericStack{}有什么好处?在classGenericStack{}.我已经使用上述两种方法实现了一个通用堆栈,但无法找出差异。帮助我理解这一点。

java - 如何声明通用处理程序的通用多类型集合

我总是很难将泛型与集合和通配符一起使用。所以这是下面的map。我想为特定类型的数据包类保留处理程序集合。privateConcurrentHashMap,List>>listeners=newConcurrentHashMap();和PacketListenerpublicinterfacePacketListener{publicvoidonOutgoingPacket(Streamerstreamer,Tpacket);publicvoidonIncomingPacket(Streamerstreamer,Tpacket);}现在我想做的是根据传入的数据包类获取监听器,如下所示:p

java - 为什么我必须转换为通用类型 T,即使我知道它会正确返回?

我的代码:privatestaticTget(Classclazz)throwsIllegalAccessException,InstantiationException{if(clazz.equals(String.class)){return(T)newString("abc");//linex}else{returnclazz.newInstance();}}如您所见,在linex中,T必须是String.class并返回String。但是编译失败,没有将结果转换为T。将linex更改为returnnewString("abc");结果Incompatibletypes。

java - 在返回参数中使用通用通配符类型

通常不鼓励在Java中的返回参数中使用通用通配符类型。例如EffectiveJava,第28条指出:Donotusewildcardtypesasreturntypes.Ratherthanprovidingadditionalflexibilityforyourusers,itwouldforcethemtousewildcardtypesinclientcode.Properlyused,wildcardtypesarenearlyinvisibletousersofaclass.Theycausemethodstoaccepttheparameterstheyshouldacce

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 将参数约束到公共(public)父类(super class)

动机我有一个Either类,表示两种类型之一的值,或语义不同的状态。在某些情况下,无论值是哪个备选方案,对其进行操作都是有值(value)的。问题我想要一个采用Consumer的(非静态)方法,其中T是L的父类(superclass)型和R,其中L和R是类的类型参数。目前,java让我这样做:(静态实现)publicstaticvoidcollapse(Eithere,Consumerop)当然,对于非静态实现,我不能对L施加约束。和R,因为它们已经为相关实例定义。我需要对T施加的那些约束相反,但java不允许我编写以下内容,因为它一次只允许父类(superclass)型或子类型约束中

java - java中的简单泛型列表

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

java - 转换为 Comparable,然后进行比较

我真的很想喜欢泛型,但到目前为止,它们造成的麻烦超过了任何好处。请告诉我我错了。我理解在使用非通用框架(Spring、Hibernate)时添加@SuppressWarnings("unchecked")的必要性。仅这一点就真正降低了泛型的值(value),因为要求将类传递给构造函数以避免删除的陷阱。然而,真正的刺似乎总是在类型转换。我通常会尝试一段时间来获得正确的语法,但随后放弃纯洁的尝试,添加一个@SuppressWarnings,然后继续我的生活。这是一个例子:我正在反射(reflection)一个bean以寻找两个实例之间的差异。一些属性实现Comparable使得(a.equ

java - 返回类型是删除的一部分吗?

有人可以解释为什么第二个类不能编译吗?1使用javac和JDK6编译良好(Eclipse会提示这段代码)publicclassSameSignatureMethods{publicBooleantest(){returntrue;}publicDoubletest(){return1d;}}2对该示例稍作改动,编译失败并出现以下错误:nameclash:test()andtest()havethesameerasure唯一的变化是方法的返回类型:publicclassSameSignatureMethods{publicBooleantest(){returntrue;}publicB

c# - Java:创建一个类型为类型参数的对象

我想编写与C#代码等效的Java代码。我的C#代码如下:publicabstractclassAwhereT:A,new(){publicstaticvoidProcess(){Process(newT());}publicstaticvoidProcess(Tt){//DoSomething...}}publicclassB:A{}publicclassC:A{}我的代码的Java等价物如下所示。publicabstractclassA>{publicstatic>voidprocess(){process(newT());//Error:Cannotinstantiatethety