草庐IT

【JavaSE】初识泛型

全部标签

Java 泛型通配符及其限制

我有一个两部分的问题Mybookstatesthis"Ifthewildcardisspecifiedwithoutanupperbound,thenonlythemethodsoftypeObjectcanbeinvokedonthevaluesofthewildcardtype"我不知道这意味着什么。这是什么意思?此外,通配符类型(无界和有界)有哪些限制?例如,如果我引用了MyClass或MyClass,我不允许通过该引用调用哪些方法。我不明白通配符允许或不允许我做什么,这可能就是我不理解书中引用的原因。我有第二部分的例子:classSomeOtherClass{[...]}cla

java - 泛型中原始类型和 <?> 的区别

可能在某处问过,但我找不到。请告诉我两者之间的确切区别:ArrayListlist=newArrayList();和ArrayListlist=newArrayList();我无法弄清楚这两者之间的确切区别是什么。谢谢... 最佳答案 ArrayList仅表示“任何类型”。换句话说,任何类型的ArrayList可以分配给这样的变量。那可能是ArrayList,ArrayList或其他任何东西。单独使用通配符,不使用关键字super(后跟类型),意味着您不能向定义为ArrayList的列表ADD任何内容。.ArrayList然而,单独

java - 泛型方法的不同返回类型取决于调用位置

我有以下带有泛型的方法,它执行接收到的列表中每个项目的getter:publicstaticListgetValues(Listlist,StringfieldName){Listret=newArrayList();StringmethodName="get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1,fieldName.length());try{if(list!=null&&!list.isEmpty()){for(Tt:list){ret.add((S)t.getClass().getMethod(

java - 类型转换一个泛型类。 (种姓)和 Class.cast()

我搜索了我的用例并找到了一些有趣的答案,但它们并不像我需要的那样合适。这样做的适当方法是什么:@SuppressWarnings("unchecked")publicTnewInstance(Stringname)throwsClassCastException,InstantiationException,IllegalAccessException,ClassNotFoundException{return(T)loadClass(name).newInstance();}或者有点不同:publicTnewInstance(Stringname,Classc)throwsClass

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

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

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

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

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泛型成员初始化

假设我有一个参数化的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 - 具有泛型类型具体实现的 LambdaMetaFactory

我正在尝试使用Java的LambdaMetaFactory动态实现通用lambda,Handler:publicclassRoutingContext{//...}@FunctionalInterfacepublicinterfaceHandler{publicvoidhandle(Xarg);}publicclassHomeHandlerextendsHandler{@Overridepublicvoidhandle(RoutingContextctx){//...}}这是我对LambdaMetaFactory的尝试:try{ClasshomeHandlerClass=HomeHan