草庐IT

Generics

全部标签

Java 泛型命名约定

根据theJavadocumentation:Themostcommonlyusedtypeparameternamesare:E-Element(usedextensivelybytheJavaCollectionsFramework)K-KeyN-NumberT-TypeV-ValueS,U,Vetc.-2nd,3rd,4thtypes但是,我见过这样的代码publicObservablecompose(Transformertransformer){return((Transformer)transformer).call(this);}这里用的是R,请问从哪里可以查到R在这里是

java - Map<K1, K2, V> 的任何实现,即两个键?

我需要一个有两个键的map,例如Map2_employees;这样我就可以_employees.put(e.ssn(),e.empId(),e)后来_employees.get1(someSsn);_employees.get2(someImpId);甚至_employees.remove1(someImpId);我不确定为什么我想停在两个,为什么不更多,可能是因为我现在需要的就是这种情况:-)但是类型需要处理固定数量的键以保证类型安全——类型参数不能是vararg:-)感谢任何关于为什么这是一个坏主意的指示或建议。 最佳答案 我想

java - Java 方法分派(dispatch)如何与泛型和抽象类一起工作?

我今天遇到了Java没有调用我预期的方法的情况——这是最小的测试用例:(很抱歉这看起来是人为的——“现实世界”的场景要复杂得多,并且从“你到底为什么要那样做?”的角度来看更有意义。)我特别感兴趣的是为什么会这样,我不关心重新设计的建议。我感觉这是在JavaPuzzlers中,但我手边没有副本。在下面的Test.getValue()中查看具体问题:publicclassOl2{publicstaticvoidmain(String[]args){Testt=newTest(){protectedIntegervalue(){return5;}};System.out.println(t.

java - 从 Java 中的 Object 转换而没有收到未经检查的警告

我写了一个类,它有一个map.我需要它来保存任意对象,但同时有时我需要转换其中一些对象,所以我会做类似的事情HashMapmap=newHashMap();Objectfoo=map.get("bar");if(fooinstanceofHashMap){((HashMap)foo).put("a",5);}发出警告Stuff.java:10:warning:[unchecked]uncheckedcastfound:java.lang.Objectrequired:java.util.HashMap((HashMap)foo).put("a",5);我怀疑这与泛型的使用有关。我可以使

java - 需要使用泛型将列表过滤到特定的子类

我有一个包含某个父类(superclass)(如Vehicle)的List,我想编写一个方法来返回该列表中的对象,这些对象是某个子类(如Car)的实例.到目前为止我有这个,但它会生成一个典型的“未经检查”的操作编译器警告:publicListgetVehiclesOfType(Classtype){Listresult=newArrayList();for(Vehiclevehicle:getVehicles()){if(type.isAssignableFrom(vehicle.getClass())){result.add(type.cast(vehicle));//Compile

java - 使用 gson 反序列化时将 TypeToken 转换为 Type 时出错

我有一个类使用此函数反序列化泛型的ArrayList,正如该线程的第一个答案中所述:JavaabstractclassfunctiongenericTypepublicArrayListarrayType(Stringdata){returng.fromJson(data,TypeToken.get(newArrayList().getClass()));}Eclipse要求我强制转换TypeToken结果(因为来自Json的函数需要类型,而不是TypeToken)publicArrayListarrayType(Stringdata){returng.fromJson(data,(T

java - 泛型和通配符 : Java likes "new Foo<Bar<?>>"

好的,所以Java不允许以下内容:Foohello=newFoo();这是有道理的——毕竟,如果您只是想装箱/拆箱所有东西,泛型有什么意义呢?奇怪的是,Java确实允许这样做:Foo>howdy=newFoo>();诚然,这实际上完成了更多,但在某些时候,会有一个转换来获取Bar正在使用的任何内容。但是,如果Java可以接受一些特殊性,为什么它不允许这样做呢?:Foobonjour=newFoo();我问的唯一原因是我决定依赖“构造函数的类参数内的通配符”,并且非常想知道它背后的含义/意图。编辑:为了澄清我的问题,允许/禁止这些陈述的理由是什么?我知道“Java不允许在构造函数中使用通

Java动态返回类型?

我有一个包含一些T类型元素的容器(List),我想过滤它。所以它只包含特定子类型U的元素。是否可以设置“动态”返回类型?例子:classSomeContainerextendsArrayList{publicSomeContainersubset(Classc){SomeContaineroutput=newSomeContainer();//filterownelementsandonlyaddc-objectsinthenewlistreturnoutput;}}目前它返回一个通用类型T的列表,而不是c类类型(T的子类型)的列表。因此,我有时会收到以下编译器通知:Note:Some

java - 通用搞砸了不相关的集合

为什么与模板类无关的集合会丢弃它们的类型?这是一个示例:(抱歉,由于我对错误感到困惑,它不会编译。)packagetest;importjava.util.ArrayList;importjava.util.List;publicclassTemplateTest{publicstaticclassA{}publicstaticclassB{ListaList=newArrayList();publicListgetAList(){returnaList;}publicintcompare(Tt,Tt1){returnt.compareTo(t1);}}publicstaticvoid

Java 将未知原始数组转换为对象数组

我一直在尝试创建自己的库来序列化和反序列化基本类型,从类到xml以及从xml到类实例,使用反射检查方法命名模式和方法返回类型。到目前为止,我已经能够对所有基本基元类型执行此操作,但我在序列化相同基元的数组时遇到了困难。例如,我调用类方法来获取基元数组:method.invoke(clazz,(Object[])null);此方法将仅返回原始数组int[]、double[]、float[]、char[]等,但我们不知道它会是哪一个。我试过使用通用的,例如Tt=(T)method.invoke(clazz,(Object[])null);T[]t=(T[])method.invoke(cl