草庐IT

Generics

全部标签

java - 需要不兼容的类型 : Class<T> found: Class<CAP#1> where T is a type-variable

以下代码:publicclassA{Classklass;Tinstance;publicA(Tinstance){this.klass=instance.getClass();//thisrequiresanexplicitcasttoClasstosatisfythecompilerthis.instance=instance;}}编译时给出:A.java:7:error:incompatibletypesthis.klass=instance.getClass();^required:Classfound:ClasswhereTisatype-variable:TextendsO

java - 具有泛型的 Vavr 给出了不兼容的类型

谁能解释一下为什么这段代码:interfaceLol{defaultTry>lol(){returnTry.of(List::empty);}}classLolImplimplementsLol{@OverridepublicTry>lol(){returnTry.of(()->List.of(1,2,3))//.onFailure(Object::hashCode);}}如果我取消注释onFailure语句会编译失败吗?不知道这里发生了什么。如何改进? 最佳答案 您可以调用Try.of()返回显式泛型以满足编译器检查。像这样的东西

java - 为什么 Java 不提示模棱两可的调用?

一个服务接口(interface)声明了两个显然做同样处理的方法:interfaceService{Rprocess(Functionfunction);Tprocess(UnaryOperatoroperator);}上面的服务被调用如下:voidprocess(Serviceservice){service.process(sequence->sequence.subSequence(0,1));}将调用哪个服务方法以及为什么编译器不提示此上下文中的模棱两可的调用? 最佳答案 方法解析选择mostspecificmatching

Java 通用类型变量

我的问题是关于泛型类和方法中使用的类型变量。为什么我们不能做这样的事情T=newT();或者换句话说,为什么我们不能构造变量类型的对象?我知道通用信息在编译时被删除,一切都转换成对象,那么为什么编译器不假定T是一个对象并让我们构造它呢? 最佳答案 问题在于,在运行时JVM不知道T实际代表哪个类(该信息不会在运行时保留,这就是“类型删除”的意思)。因此,JVM只看到您想要构造一个新的T,但不知道实际调用哪个构造函数-因此这是不允许的。有变通办法,但不会像您建议的那样工作。whydoesn'tthecompilerassumethatT

java - 创建泛型类的公共(public)内部类的实例

所以我有如下内容:publicclassEnclosing>{//non-relevantcodesnippedpublicclassInner{privateTvalue;publicInner(Tt){value=t;}}}万物皆可编译,天下皆大欢喜。但是,每当我尝试创建Enclosing.Inner的实例时如下,我不行:newEnclosing.Inner(5);出现以下错误:CannotallocatethemembertypeEnclosing.Innerusingaparameterizedcompoundname;useitssimplenameandanenclosin

Java 泛型和集合阅读引用

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找书籍、工具、软件库、教程或其他场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,请描述问题以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion虽然我知道泛型和集合的一些工作知识,但也可以说有一些使用集合API的实践经验。但是当涉及到一些关于泛型的良好知识时,我必须说我总是依靠谷歌来找到我的答案。我正在寻找一些引用资料以深入了解泛型和集合,欢迎任何在线引用资料或书籍建议。我不确定这个问题的建

java - 如何在 java 中创建一个通用的单例类?

我想在java中创建一个通用的单例类,女巫给出了我在方法参数中传递的类的单例对象。像下面的代码:请帮忙publicfinalclassListener{privateListener(){}publicstaticListenergetInstance(Classclazz){returnSingletonHolder.INSTANCE;}privatestaticclassSingletonHolder{publicstaticfinalListenerINSTANCE=newListener();//privatestaticfinalMap,ListenerINSTANCE=ne

java - Java 中的通配符 Generic 和 <? super T> 意思,下界或上界

所以我在阅读泛型方法时感到很困惑。先说一下这里的问题:在这个例子中:假设我需要一个适用于任何类型T的selectionSort版本,方法是使用调用者提供的外部可比较对象。第一次尝试:publicstaticvoidselectionSort(T[]arr,ComparatormyComparator){....}假设我有:定义车辆类别创建了实现Comparator的VehicleComparator,同时按价格比较车辆。创建卡车扩展车辆实例化卡车[]arr;车辆比较器myComparator现在,我做:selectionSort(arr,myComparator);它不会工作,因为my

java - <T> T 和 T 在方法的返回类型中有什么区别?

我有一个方法,像这样,publicTdoSomething(ClassT){returnT.newInstance();}我也可以这样做,publicTdoSomething(ClassT){returnT.newInstance();}这两者有什么区别吗?请忽略T.newInstance(),我基本上会以某种方式创建T的新实例并返回它。谢谢,山姆 最佳答案 What'sthedifferencebetweenTvsTinthereturntypeofamethod?没有T.不是返回类型的一部分;它是一个单独的东西,表示类型参数。(

java - 运算符 < 未定义参数 Number, int

我是不是太聪明了?privatestaticLongextractLong(Tvalue){if(valueLong.MAX_VALUE){//产生编译错误:Theoperator>isundefinedfortheargumenttype(s)T,long但如果我显式执行该函数,它会编译:privatestaticLongextractLong(Longvalue){if(valueLong.MAX_VALUE){thrownewNumberFormatException("Conversionfrom"+value+"toLongwilloverflow");}returnvalu