草庐IT

Generics

全部标签

java - 有没有办法在 lambda 表达式中显式定义泛型参数类型?

我这里有一个Handler类,它应该处理特定类型的Event:publicinterfaceHandler{publicvoidhandle(Eevent);@SuppressWarnings("unchecked")publicdefaultClassgetEventType(){for(Methodmethod:this.getClass().getDeclaredMethods()){if(method.getName().equals("handle"))return(Class)method.getParameterTypes()[0];}thrownewNullPointe

java - Java泛型的不兼容类

看来我又被java泛型困住了。这是我所拥有的:几个类:classCoolIndeximplementsEntityIndexclassCoolEntityextendsBaseEntity使用上面的类枚举:enumEntities{COOL_ENTITY{@Overridepublic>ClassgetIndexCls(){returnCoolIndex.class;}@OverridepublicClassgetEntityCls(){returnCoolEntity.class;}}publicabstract>ClassgetIndexCls();publicabstractCl

java - 转换为通用类型时 Java 中的警告

我有一些通用代码,我不知道如何合法地防止收到警告;我目前正在使用@SuppressWarnings("unchecked"),因为似乎无法在没有警告的情况下转换泛型类型。我怎样才能去掉注释?我有的是:publicMyObject(SharedContextctx){super(ctx);//setprotectedfield'context'...context.set("InputFields",Collections.synchronizedMap(newTreeMap>(String.CASE_INSENSITIVE_ORDER)));context.set("OutputFie

java - 在 Java 中扩展 T 和 SomeInterface<T>

我想创建一个带有两个参数的类。一个应该简单地输入为T。另一个应该输入为同时扩展T和SomeInterface的内容。.当我尝试使用publicclassSomeClass&T>然后Java提示“类型T不是接口(interface);它不能指定为有界参数”如果相反,我尝试为S创建一个接口(interface)publicinterfaceTandSomeInterfaceextendsSomeInterface,T然后Java提示“不能将类型参数T引用为父类(superclass)型”有没有办法在Java中做到这一点?我想你可以用C++来做...? 最佳答案

Java 泛型 : How does method inference work when wildcard is being used in the method parameters?

假设我有以下内容:classx{publicstaticvoidmain(String[]args){Lista=newLinkedList();Listb=newLinkedList();Listc=newLinkedList();abc(a,"Hello");//(1)Errorabc(b,"Hello");//(2)Errorabc(c,"Hello");//(3)okdef(b);//(4)ok//ShowinginferenceatworkInteger[]a={10,20,30};//(5)Tisinferredtobe?extendsObjectMethodsignatu

java - 名称冲突 : The method add(Object) of type test2 has the same erasure as add(E) of type HashSet<E> but does not override it

导入java.util.*;classAextendsHashSet{publicbooleanadd(Objectobj){//compilererrorreturntrue;}}orclassAbc{publicvoidadd(Tt){}//compilererrorpublicvoidadd(Objecti){}//compilererror(can'toverload?)}错误:名称冲突:test2类型的方法add(Object)与HashSet类型的add(E)具有相同的删除,但没有覆盖它我不知道上述错误背后的概念是什么,有人可以建议我在哪里可以研究这个概念吗?

java - 为什么允许我将泛型数组声明为实例变量?

我完全知道不能像这样实例化通用数组:data=newEntry[];这会导致错误:CannotcreateagenericarrayofEntry那么,为什么我可以声明一个没有错误的泛型数组实例变量?privateEntry[]data; 最佳答案 原则上,JoachimSauer的评论已经是您的答案,但是,我想详细说明一下。Sun(Oracle)知道一种称为内存污染的现象,如果通用变量指针指向类型不兼容的对象,就会发生这种现象。例如,可以使用以下代码强制执行此操作:Listlist=newArrayList();Listnumbe

java - 由于缺少 GenericArrayType 而从 Java6 升级到 Java7 时出现 ClassCastException

我的代码在Java5和6中运行,但是当我升级到Java7时,我得到一个“java.lang.ClassCastException:java.lang.Classcannotbecasttojava.lang.reflect.GenericArrayType”。对于下面的代码:publicclassA{publicVectorarr;}System.out.println(((ParameterizedType)A.class.getField("arr").getGenericType()).getActualTypeArguments()[0]);System.out.println

java - 迭代参数化列表(原始列表类型分配后)

语言:Java编译器版本:1.6在下面的代码中,我尝试执行以下操作:创建一个List添加String分配List到原始List创建一个List分配原始List至List添加Integer使用get()检索值@索引1和2并打印它们。所有语句都在编译(带有警告)并且运行良好。但是如果我尝试遍历List使用for循环,我得到一个ClassCastException.我只是想知道为什么它允许我使用list.get()方法但不允许我对其进行迭代?输出:(如果我使用未注释的for循环运行)abcd200Exceptioninthread"main"java.lang.ClassCastExcept

java - 为什么这个泛型数组创建没有按预期工作?

我有以下代码,我在其中创建一个数组并尝试在其中存储对象。在运行时,我得到一个ArrayStoreException。importjava.lang.reflect.Array;publicclassGenericsArrayCreation{publicstaticvoidTest(T[]A){@SuppressWarnings("unchecked")T[]temp=(T[])Array.newInstance(A.getClass(),A.length);for(inti=0;i我不知何故明白这是因为声明T[]temp=(T[])Array.newInstance(A.getCla