草庐IT

【JavaSE】初识泛型

全部标签

java - 泛型的泛型和更通用的 <?> 赋值

有时我就是不懂泛型。我经常在代码中使用最通用的集合版本。例如,如果我需要一组任何东西,我会写这样的东西:Setset1=newHashSet();它是编译器允许的,为什么不应该-Set和Set一样一般(或者更通用......)。但是,如果我使用“genericsofgenerics”使其“更通用”是行不通的:Set>singletonSet=newHashSet>();//typemismatch这是怎么回事?为什么是Set可分配给Set和Set>不可分配给Set>?我总能找到解决此类问题的方法,但在这种情况下,我真的很想知道为什么不允许这样做并且不是解决方法。

java - 如何在 Java 中对泛型类型列表进行排序

我有一组共享一些共同属性的类,所以我让它们都扩展了一个共同的基类,BaseEntity.所以我有,例如FooextendsBaseEntity和BarextendsBaseEntity.我还想要这些Foo的列表和Bar对象是可排序的,所以我实现了Comparable.我将类定义为FooextendsBaseEntityimplementsComparable和BarextendsBaseEntityimplementsComparable,以及Foo列表的排序s或Bars按预期工作-当然,排序的细节在不同的子类中是不同的。但是当我事先不知道我是否会有Foo时,我不知道如何进行排序。s或

java - Java 不允许在变量声明中使用泛型类型声明的任何原因?

假设我们有这样一个类:publicclassxx{publicinterfaceFoo{TgetValue();voidsetValue(Tvalue);}publicvoidresetFoos(Iterable>foos){for(Foofoo:foos)foo.setValue(foo.getValue());}}它会编译失败,即使直觉上它似乎“应该”:xx.java:10:setValue(capture#496of?)inxx.Foocannotbeappliedto(java.lang.Object)foo.setValue(foo.getValue());原因是foo没有绑

java - 类声明中的泛型

我有1)一个基本的界面,2)几个实现这个接口(interface)的类,3)和一个我想接受的通用类,作为参数,任何实现类我尝试了以下方法:publicclassFooextendsBar{publicFoo(ListsomeInterfaceList){super(someInterfaceList);}...}我收到错误NoWildcardExpected.在我的代码的其他地方,我有诸如List之类的语句而且我没有收到任何错误,那么为什么我会在这里遇到问题?我怎样才能解决这个问题并仍然获得预期的结果?我已尝试搜索“没有预期的通配符”和“类声明中的通配符”,但均无济于事。提前致谢!

java - 为什么二级泛型在 Java 中是不可能的

长话短说:为什么以下在Java中是不可能的?publicclassTest>{}//AandBbothbeinggenericparameters.Note:Idon'thaveanyspecificusecaserightnow,ratherIamjusttryingtounderstandwhythisisnotallowed.起初我以为是因为编译器无法断言A是否可以接受泛型参数,因为在编译A之后,由于类型删除泛型不会再出现了。但是,如果是这样的话,那么我们根本就不能在任何类上使用泛型。所以我拿出一个泛型类的字节码,发现有元数据说它接受泛型。publicclasscom.Test{

java - 对泛型类的非泛型引用导致非泛型返回类型

我有一个遗留类,该类本身不是泛型,但它的一个方法返回类型使用泛型:publicclassThing{publicCollectiongetStuff(){...}}getStuff()使用泛型返回字符串集合。因此我可以遍历getStuff()并且无需将元素转换为String:Thingt=newThing();for(Strings:t.getStuff())//valid{...}但是,如果我改变Thing本身是通用的,但保持其他一切相同:publicclassThing{publicCollectiongetStuff(){...}}然后继续使用对Thing的非通用引用,getSt

Java泛型,使用类层次结构时如何避免未经检查的分配警告?

我想使用一种方法,该方法使用通用参数并在类层次结构上返回通用结果。编辑:否SupressWarnings("unchecked")允许回答:-)这是一个示例代码来说明我的问题:importjava.util.*;publicclassGenericQuestion{interfaceFunction{Rapply(Fdata);}staticclassFruit{intid;Stringname;Fruit(intid,Stringname){this.id=id;this.name=name;}}staticclassAppleextendsFruit{Apple(intid,Str

java - Java使用反射创建泛型参数化类

如何使用反射在Java中创建通用参数化类?我有publicclassSomeClass{publicSomeClass(){}}我需要它的一个实例。我试过各种变体Classc=Class.forName("SomeClass");但找不到允许我获得适当类型实例的语法,例如SomeTypeinstance=(SomeType)Class.forName("SomeClass").createInstance();那么,我该怎么做呢? 最佳答案 Java使用基于删除的泛型(即,类型参数在运行时被删除——例如,List和List在运行时被

java - instanceof 与泛型集合

为什么以下代码片段无法编译?if(mangoListinstanceofList){System.out.println("true");}你不知道mangoList是一个List类型。instanceof关键字只适用于原始类型。您只能使用反射来检查集合的类型。通用类型在运行前被删除。(ans)该语句可能导致将mangoList设置为List的实例。你认为哪个是正确答案? 最佳答案 正确答案是您标记为ans的答案。您将能够分辨出mangoList是一个List,但您无法获取其已删除参数的类型。剩下的选择没有意义。

java - 无法使用 Java 泛型选择合适的方法

这个程序不符合我的要求。它打印了两次“sad”,而我希望它会打印“happy”然后打印“sad”。publicclassWoof{publicstaticclassArf{Tyap;publicArf(Tyap){this.yap=yap;}publicStringwoof(){/**ShouldselectwhichdoYapStuff()basedonwhetherT*happenstobeanInteger,orsomethingelse.*/returndoYapStuff(yap);}/*SpecialcaseimplementationofdoYapStuff()where