草庐IT

Generics

全部标签

java - 如何绑定(bind)子类的类类型

我有这门课:publicabstractclassAddressable{abstractvoidhardEquals(Tt);}方法hardEquals(Tt)没有像我想要的那样有界。我想要的是将T绑定(bind)为this的同一类。换句话说,当我使用具体类MyAddressable扩展类Addressable时,我希望方法hardEquals()具有签名:voidhardEquals(MyAddressablet);为了完整性:publicclassMyAddressableextendsAddressable{voidhardEquals(MyAddressablet);}是否有

java - 为什么 Function.identity() 会破坏类型具体化,而 t -> t 却不会?

在Java8lambdas,Function.identity()ort->t找到答案似乎暗示Function.identity()几乎总是等同于t->t。但是,在下面看到的测试用例中,将t->t替换为Function.identity()会导致编译器错误。这是为什么?publicclassTestcase{publicstaticCollectorcomparatorOrdering(FunctionkeyMapper,FunctionvalueMapper,ComparatorkeyComparator,ComparatorvalueComparator){returnnull;}

java - 具有多个继承类的通用返回类型的自引用方法

这可能有点难以描述。不过,我会试试的;)遵循流畅的风格,类的方法返回类实例本身(this)是很常见的。publicclassA{publicAdoSomething(){//dosomethingherereturnthis;}}当扩展这样一个流畅的样式类时,可以在第一个继承步骤中通过泛型类型轻松完成此操作,并将返回类型转换为父类(superclass)中的此泛型类型。publicclassA>{publicTdoSomething(){//dosomethingherereturn(T)this;}}publicclassBextendsA{//anextendedclassofcl

java - 具有可变数量的方法引用的通用对象比较方法用于比较

我经常需要比较某种类型的实例是否相等,但我不需要比较所有内容,只需比较某些字段即可。我通常这样做:Comparatorc=Comparator.comparing(SomeType::getNumber).thenComparing(SomeType::getType).thenComparing(SomeType::getSite).thenComparing(SomeType::getAddition).thenComparing(SomeType::getImportantFlag);if(c.compare(old,new)==0){...}因为我必须经常这样做,所以我想知道是

java - 使用通用数组的 ArrayList 转换 ArrayList.toArray()

一个我几乎要放弃所有希望的难题。我想做一个函数,但在获取ArrayList.toArray()返回我想要的类型时遇到问题。这是演示我的问题的最小示例:publicstaticT[]test(Tone,Ttwo){java.util.Listlist=newArrayList();list.add(one);list.add(two);return(T[])list.toArray();}通常我可以使用(T[])list.toArray(newT[0])的形式,但是有两个额外的困难:由于协方差规则,我无法对数组进行类型转换,(T[])myObjectArray给出了一个ClassCast

Java 泛型错误 : inconvertible types from command line compiler

我有一些使用泛型的Guice绑定(bind)代码,这些代码可以在Eclipse的编译器中正常编译和运行,但不能在Java(命令行)编译器中正常运行。我升级到最新的(1.7.0_01)JavaSDK,但仍然出现以下错误。[error]...\BindCategorySelectorActivity.java:42:error:inconvertibletypes[error](Class>>)CategoryDataProvider.class);[error]^[error]required:Class>>[error]found:Class[error]1error[error]{f

java - spring 如何 Autowiring 通用转换器?

偶尔我会注意到一些有趣的事情:我已经实现了springConverter接口(interface):@ComponentpublicclassMyConverterimplementsConverter{@OverridepublicMyClass2convert(MyClass1source){//doesn'tmatter}}在Controller中我像这样Autowiring它@AutowireConvertermyConverter;惊喜,但spring注入(inject)了适当的类。根据我的信息,spring在运行时Autowiringbean。我也知道在运行时通用类型删除。

java - 为什么编译器会对待 List<?> 和 List<?以不同方式扩展 Object>?

考虑以下代码:importjava.util.ArrayList;importjava.util.List;publicclassUnboundedWildcardProblem{publicstaticvoidmain(String[]args){Lista=newArrayList();Listb=newArrayList();}}创建List不会产生任何警告,但会创建List产生未经检查的警告:Warning:java:uncheckedconversionrequired:java.util.Listfound:java.util.ArrayList我搜索了可能的原因,发现了一

java - 如果我们应用类型删除,哪些重载方法将在运行时被调用,为什么?

假设我们有下面的泛型类publicclassSomeType{publicvoidtest(Collectioncollection){System.out.println("1stmethod");for(Ee:collection){System.out.println(e);}}publicvoidtest(ListintegerList){System.out.println("2ndmethod");for(Integerinteger:integerList){System.out.println(integer);}}}现在在main方法中我们有以下代码片段SomeTyp

Java泛型和继承

我有以下抽象类:publicabstractclassAbSuperClass1{//classdefinition}和:publicabstractclassAbSuperClass2{publicabstract>voidmethod(Qarg);...}然后我有两个具体的实现publicclassConcrete1extendsAbSuperClass{//classdefinition}和:publicclassConcrete2extendsAbSuperClass2{publicvoidmethod(Concrete1arg){//methoddefinition}}然而,