草庐IT

Generics

全部标签

Java 泛型 : Obtaining a Class<Collection<T>>?

我在使用泛型时遇到问题。给定以下示例:classA{publicA(ClassmyType){}}classBextendsA>{publicB(ClassmyEType){super(???);}}什么???应该?Collection.class不工作...Collection.class两者都不。(Class>)Collection.class不工作...如果有java泛型大师,我需要帮助...:/ 最佳答案 你不可能得到Class>除了Collection.class,因为类型删除。你必须使用不安全的转换来转换Collecti

Java 泛型通配符及其限制

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

java - 条目集上的通用迭代器

staticvoidmyMethod(Mapmap){Iterator>it=map.entrySet().iterator();}我看到以下编译错误:类型不匹配:无法从Iterator>转换至Iterator> 最佳答案 尝试Iterator>it=map.entrySet().iterator();您的尝试不起作用的原因有点难以理解,特别是因为Iterator不消耗任何T(即它没有将T作为参数的方法)。您不能分配Iterator>到Iterator>出于同样的原因,你不能分配Iterator>到Iterator>.capture

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 - 如何在不使用 setter 的情况下将值设置为类变量

我想在不使用setter的情况下向Object变量插入一个值。有可能怎么办。这是一个例子ClassX{StringvariableName;//gettersandsetters}现在我有一个函数,其中包含变量名、要设置的值和一个X类对象。我正在尝试使用通用方法将值设置为Object(objectOfClass)以及我在相应变量(variableName)中传递的值(valueToBeSet)).ObjectfunctionName(StringvariableName,ObjectvalueToBeSet,ObjectobjectOfClass){//Iwanttodotheexac

java - 列表<interfaceI> 与列表<?在 java 中扩展 InterfaceI>

数组列表List和List两者都将具有实现interfaceI的类的对象。那什么时候用呢? 最佳答案 假设Foo和Bar是实现InterfaceI的两个类.第二个(List)不允许向列表中添加任何内容(null除外),因为列表包含的类型是未知的:它可能是List或List:你只是不知道。因此,当您希望该方法读取作为参数传递的列表的元素,并希望调用者能够使用List,一个List或List.使用List作为参数只接受List类型的列表.让我们举一个具体的例子:你想计算一个数字列表的最大double值。这种方法不需要向列表添加或设置任何

java - 如何通过实例获取列表的所有元素?

如何通过实例获取列表的所有元素?我有一个列表,可以包含接口(interface)的任何类实现Foo:interfaceFoo;classBarimplementsFoo;我想使用java8streamapi提供用于提取特定类类型的所有元素的实用方法:publicstaticListgetFromList(Listlist,Classtype){return(List)list.stream().filter(entry->type.isInstance(entry)).collect(Collectors.toList());}使用:Listlist;Listbars=Util.get

Java 8 通用函数映射

不确定这是否可能;我承认我并不像我希望的那样擅长泛型。基本上,我想创建一个类->函数的映射其中用于键的类是函数输入的类,像这样(不合法的语法):publicstaticMap,Function>STUFF=newHashMap();{STUFF.put(List.class,ListExpression::new);STUFF.put(String.class,StringExpression::new);//thisconstructormusttakestring}所以如果我这样做:Functione=STUFF.get(o.getClass());Expressionex=e.a

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

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