草庐IT

Generics

全部标签

Java 8 通用函数应该是模棱两可的,但在运行时失败

我正在尝试将Java7代码迁移到Java8,所以我的代码类似于:packagetests;importjava.util.Arrays;importjava.util.Map;publicclassTests{privatestaticinterfaceComparableMapextendsMap,Comparable{}publicstaticvoidmain(String[]args){func(getString());}privatestaticvoidfunc(Comparable...input){System.out.println(Arrays.toString(in

java - Jackson 模块签名阻止为自引用泛型类型添加序列化程序

我想为JSR363添加自定义序列化器和反序列化器javax.measure.Quantity>,它基本上封装了一个“值”和一个“单元”。创建序列化器(extendsJsonSerializer>)和反序列化器(extendsStdDeserializer>)很容易。但是要注册它们并不容易。对于反序列化器,没关系;看签名:SimpleModule.addDeserializer(Classtype,JsonDeserializerdeser)请注意,反序列化器允许扩展泛型。所以我可以这样做:module.addDeserializer(Quantity.class,newMyQuanti

java - Java抽象方法中使用通配符和声明泛型的区别

我试图理解Java中的泛型类型,理论上它看起来可以理解,但是当我需要将它应用到实际代码时我遇到了问题。我想声明将返回泛型类型的抽象方法。假设我有一些名为Magicable的空接口(interface),并且有2个类实现它:Magican和Witch。现在我想知道这3个声明之间有什么区别:/*1*/protectedabstractListgetMagicables();/*2*/protectedabstractListgetMagicables();/*3*/protectedabstractListgetMagicables();在第一种情况下,当我想在扩展抽象类的某个类中实现此方

c# - IKVM.net 不支持泛型(类型参数)吗?

我静态地重新编译了一个经常使用泛型的Java库,比如Collection,但发出的.NETdll仅使用Collection,不带类型参数。怎么会? 最佳答案 Java泛型由Java编译器处理,并在编译时转换为非泛型版本。这与.NET不同,在.NET中,CLR具有对类型参数的一流支持。在字节码级别,ArrayList将只是一个简单的ArrayList.引用Javadocs:GenericsareimplementedbytheJavacompilerasafront-endconversioncallederasure,whichis

java - JVM 是否有计划在运行时支持泛型?

您知道,就像CLR一样。有没有人甚至承认缺少运行时通用信息是一个问题,并努力解决它? 最佳答案 Java的设计者选择了这个解决方案来保持向后兼容性(在字节码级别)。从那时起,出现了更多的Java代码,因此破坏向后兼容性将产生更糟糕的后果。所以我怀疑他们会改变主意。 关于java-JVM是否有计划在运行时支持泛型?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3998503/

java - 泛型XmlAdapter可以写吗

我知道,我可以使用原始类型来编写XMLAdapter,但我可以使用泛型类型吗?我尝试阅读API(link),但我什至没有注意到这方面的线索。例如map:我想使用,比如:@XmlJavaTypeAdapter(GenericMapAdapter.class)//privatefinalHashMapdepWageSum=//newHashMap();得到289.001499.81741.824...类本身可能类似于:@SuppressWarnings("serial")publicclassGenericMapAdapterextendsXmlAdapter,Map>{publicsta

Java 泛型 : Question regarding type capture and generated inference using generic methods

这是我上一个问题的后续问题,但由于上一个线程很长,我决定开始另一个与几乎相同主题相关的线程。publicclassGenericMethodInference{staticvoidtest1(Tt1,Tt2){}staticvoidtest3(Tt1,Listt2){}staticvoidtest4(Listt1,Listt2){}publicstaticvoidmain(String[]args){Listc=newLinkedList();Listd=newArrayList();Liste=newArrayList();test1("Hello",newInteger(1));/

java - 为什么 List 接口(interface)的 lastIndexOf() 方法接受 Object 作为参数而不是 E?

lastIndexOf()List接口(interface)的方法接受一个Object类型的参数。然而,add()方法接受类型为E的参数(这是在创建列表时定义的列表的泛型类型)由于add()只接受E,这可以防止开发人员(或用户)在编译时将任何不兼容的对象添加到列表中。现在,Java文档说如果传递的对象不兼容,lastIndexOf()可以抛出ClassCastException。但是,当我在EclipseHelios中运行以下代码时,我没有得到任何异常:-packagescjp.collection.list;importjava.util.ArrayList;importjava.u

Java 泛型 : Inferring types over two parameters

假设我有一个像这样的简单方法来处理两个列表:publicstaticvoidfoo(Listlist1,Listlist2){}假设我想这样调用它:foo(ImmutableList.of(),ImmutableList.of(1));这不会编译,因为javac不够聪明,无法弄清楚我正在尝试创建两个整数列表。相反,我必须写:foo(ImmutableList.of(),ImmutableList.of(1));我应该如何更改foo的声明以允许第一个版本和第二个版本一样工作? 最佳答案 我很确定Java的类型推断不够强大,无法处理统一

java - 避免返回通配符类型

我有一个包含通配符类型集合的类,它是一个单例,类似于:publicObliviousClass{privatestaticfinalObliviousClassINSTANCE=newObliviousClass();privateMap>map=newHashMap>();publicvoidputType(Keykey,Typetype){map.put(type);}//returnsthesingletonpublicstaticObliviousClassgetInstance(){returnINSTANCE;}}我希望能够在客户端代码中向该集合添加不同的参数化类型:voi