草庐IT

Generics

全部标签

java - Java 中通用方法参数的 getClass()

以下Java方法编译失败:voidfoo(Tt){Classklass=t.getClass();}收到的错误是:类型不匹配:无法从Class转换至Class谁能解释为什么Class无效,但是Class还好吗?Javadoc说:TheactualresulttypeisClasswhere|X|istheerasureofthestatictypeoftheexpressiononwhichgetClassiscalled.Forexample,nocastisrequiredinthiscodefragment:Numbern=0;Classc=n.getClass();

方法参数的Java泛型类型删除

我从JoshuaBloch的googleI/O益智演讲中得到了这个。这是代码publicclassGlommer{Stringglom(Collectionobj){Stringresult="";for(Objecto:obj){result+=o;}returnresult;}intglom(Listints){intresult=0;for(inti:ints){result+=i;}returnresult;}publicstaticvoidmain(Stringargs[]){Liststrings=Arrays.asList("1","2","3");System.out.

java - 如何编写通用方法来查找最大元素并调用该方法?

当我试图解决练习时fromgenericstutorialQ&A我的回答略有不同我的答案publicstatic>Tmax(Listlist,intbegin,intend)//Option1publicstatic>Tmax(Listlist,intbegin,intend)//Option2来自下面引用的答案所以我的问题是选项1:如果TextendsObject&Comparable会有什么不同吗?替换为TextendsComparable.不是extendsObject隐含的?选项2:如果Comparable会有什么不同吗?替换为Comparable?如果是怎么办?Eclipse

java - 泛型混淆 : deceiving the compiler

考虑一段代码:publicclassGenericsConfusion{publicstaticClassget(Classclazz){Mapmap=newHashMap();map.put(Integer.class,String.class);returnmap.get(clazz);}publicstaticvoidmain(String[]args){Classclazz=get(Integer.class);System.out.println(clazz);}}它可以完美地编译和运行。这个想法是在get方法中返回与输入类具有相同类型参数的类。但由于map的存在,它被打破了

java - "extends"和 "super"的泛型通配符

我正在从事一个需要将服务添加到组件的项目。Service类是一个没有任何方法的接口(interface)。这是我的服务如何工作的示例:publicinterfaceService{}publicinterfaceCarWashextendsService{voidwashCar(Carcar);}publicinterfaceCarRepairextendsService{voidrepairCar(Carcar);}现在有很多这些服务的实现。一个类可以实现多个服务,如这个车库类:publicclassGarageimplementsCarWash,CarRepair{@Overrid

java - Java 中破坏逆变边界的安全解决方法?

如Boundinggenericswith'super'keyword中所述当涉及方法泛型的下限时,Java类型系统已损坏/不完整。由于Optional现在是JDK的一部分,我开始更多地使用它,而Guava使用他们的Optional遇到的问题开始成为我的痛苦。我想出了一个体面的工作,但我不确定它是否安全。首先,让我设置示例:publicclassA{}publicclassBextendsA{}我希望能够声明如下方法:publicclassCache{privatefinalMapcache;publicOptionalfind(Strings){returnOptional.ofNu

java - 为什么在类级别不允许泛型中的 super 关键字

在泛型中classA允许但是classA不允许我不明白这一点。这听起来像是新手问题,但我深陷其中 最佳答案 引用JavaGenerics:extends,superandwildcardsexplained:Thesuperboundisnotallowedinclassdefinition.//thiscodedoesnotcompile!classForbidden{}Why?Becausesuchconstructiondoesn'tmakesense.Forexample,youcan'terasethetypeparame

Java 泛型 : Why Does Map. get() 忽略类型?

这个问题在这里已经有了答案:WhatarethereasonswhyMap.get(Objectkey)isnot(fully)generic(11个答案)关闭9年前。在Java中,Map接口(interface)定义为,publicinterfaceMap{...Vget(Objectkey);...}为什么不呢?Vget(Kkey);我刚刚遇到了一个讨厌的错误,因为使用了错误类型的key。我认为泛型的目的是在编译过程中尽早发现类型错误。这是否违背了这个目的?

java - 继承带有边界扩展的通用内部类的编译错误

我在编译带有内部类的泛型类时遇到问题。该类扩展了泛型类,内部类也是。这里实现了接口(interface):publicinterfaceIndexIteratorextendsIterator{...}通用父类(superclass):publicabstractclassCompoundCollection>implementsCollection{...protectedclassCompoundIterator>implementsIterator{...}}带有编译器错误的泛型子类:publicclassCompoundListextendsCompoundCollection

java - 如何将泛型类传递给 Java 中的方法?

假设我们有一个函数可以创建给定特定类的对象:publicstaticTcreateObject(Classgeneric){try{returngeneric.newInstance();}catch(Exceptionex){returnnull;}}我们可以很容易地使用该函数来创建非泛型类型的实例。publicstaticvoidmain(String[]args){Foox=createObject(Foo.class);}是否可以用泛型做同样的事情?publicstaticvoidmain(String[]args){ArrayListx=createObject(ArrayL