草庐IT

Generics

全部标签

7和8中的Java通配符区别

我有以下代码,它在Java8上运行良好:List>KEY_NAME_CLASSES=Collections.singletonList(String.class);但是当我尝试使用Java7编译器时,出现错误:incompatibletypes:java.util.List>cannotbeconvertedtojava.util.List>为什么?有什么方法可以在Java7中使用此类通配符吗? 最佳答案 类型推断在Java-7和Java-8中有很大不同。简而言之,Java-7仅使用表达式本身来确定表达式类型,而Java-8可以使用

java - 访问泛型类型的静态字段

我能否要求实现接口(interface)的类具有某个静态字段或方法,并通过泛型类型参数访问/调用该字段或方法?我有一个接口(interface),Arithmetical,它指定了几个函数,例如Tplus(To)和Ttimes(To)。我还有一个Vector>类,它适用于具有N类型组件的vector(可变维度)。然而,我在尝试实现dotproduct时遇到了一个问题。.我想实现方法Ndot(Vectoro)。为此,我计划从N的零开始,并遍历两个Vectors'Lists,将每对元素的乘积加到我的总数中。有没有办法在Arithmetical中指定所有实现类必须有一个静态(最好是最终)字段

java - 如何从通用对象调用实例方法?

假设我有一个arrayList包含不同类的项目,它们都具有相同的方法:draw();我有第三个类,其方法drawItems()将arrayList作为参数。现在,如果这些对象作为通用对象传递,我该如何调用这些对象的draw()方法?下面这个是行不通的。我明白为什么。Java不知道项目有这样的功能。我该如何解决这个问题?publicvoiddrawItems(ArrayListdata){data.forEach((Titem)->{item.draw();});}更新谢谢大家。我是这样做的:1)创建名为Drawable的接口(interface):publicinterfaceDraw

java - 如果实例没有分配泛型类型,则每个循环问题中的泛型

这个问题在这里已经有了答案:Whatisarawtypeandwhyshouldn'tweuseit?(16个答案)关闭6年前。有人可以向我解释为什么明确需要为ForEachLoop实例分配泛型类型吗?为什么编译器会提示:类型不匹配:无法从元素类型Object转换为String?JDK1.5.0_09importjava.util.ArrayList;importjava.util.Collection;publicclassForEachLoop{publicstaticvoidmain(String[]args){//NonfunctionalversionForEachLoopf

java - 有没有办法避免构造函数传递类?

考虑这个HashMap扩展(如果它为null,则在调用“get”时生成V类的实例)publicclassHashMapSafeextendsHashMapimplementsMap{privateClassdataType;publicHashMapSafe(Classclazz){dataType=clazz;}@SuppressWarnings("unchecked")@OverridepublicVget(Objectkey){if(!containsKey(key)){try{put((K)key,dataType.newInstance());}catch(Instantia

Java 泛型 : capture cannot be applied to Object

我的代码有一个Map的(Message)Handlers。我正在尝试使处理程序通用化(如接口(interface)处理程序所见)。如果没有泛型,处理程序都需要从Object转换为相应的类,最好避免这种情况(但一切正常)。对于每个消息类(下面的Foo),我都有一个处理程序类。如何将任何类型的类映射到任何类型的处理程序,并“仅”使用一个对象获取/调用?(不能限制handleMessage(Object)的参数)请参阅下面的MWE。importjava.util.*;publicclassLogic{Map,Handler>handlers=newHashMap,Handler>();pub

java - 获取 Class<T> 的实例 [Runtime-Type Token]

我创建了一个Preferences类,并且我不想为Getters使用运行时类型token。所以这是我的getter方法:publicTget(Stringkey,Classclazz){//dosomecrazystuff(e.g.DoubleFloat)}到目前为止,一切正常。但我希望类参数是可选的。booleanb=preferences.get(key);所以我添加了一个额外的方法:publicTget(Stringkey){//returnget(key,Class);}现在问题:有没有办法做到这一点?有没有办法获取Class的实例?.可以通过一个小的解决方法:publicTg

Java泛型成员初始化

假设我有一个参数化的Java类,它包含一个私有(private)T_member。我想编写一个default构造函数(无参数),以某种方式将我的T_member初始化为某个已知的类型T特定值(例如-1表示整数,Float.MAX_VALUE表示float...)。那可能吗?我尝试了newT(),但编译器不喜欢那样。还是我什么都不做,保证会为我调用默认构造函数? 最佳答案 因为typeerasure,在运行时“没有T”。绕过它的方法是传递一个Class的实例进入构造函数,像这样:publicclassMyClass{T_member;

java - 将泛型 Class<T> 作为参数传递

我需要传递一个Class作为参数,但我只有泛型类型T。如何推断泛型Class并将其传递给fromJson()?publicclassDeserializerimplementsJsonDeserializer>{publicTsomeMethod(){...Ttag=gson.fromJson(obj,???);//takesaclasse.g.something.class...}}谢谢 最佳答案 感谢Java类型删除,你不能。http://docs.oracle.com/javase/tutorial/java/generics

java - 反序列化 Gson 中的通用列表

我想写一个泛型函数,它用Gson反序列化一个泛型类型列表这是代码:privateListGetListFromFile(Stringfilename){//ReadtextfileBufferedReaderreader;Stringdata="";try{reader=newBufferedReader(newFileReader(filename));data=reader.readLine();reader.close();}catch(FileNotFoundExceptionex){}catch(IOExceptionex){}if(data==null){ListSpiel