草庐IT

Generics

全部标签

Java 泛型——推断嵌套类型

我定义了以下类:classOperationclassGetReservationOperationextendsOperation现在我想要一个这样的类:OperationExecutor>extendsAsyncTask{@OverrideprotectedSdoInBackground(T...params){returnnull;}}但这不会编译:OperationExecutorexecutor=new....为什么Java不允许这样做?一段时间后,我想到了以下解决方案:OperationExecutor,S>extendsAsyncTask{@Overrideprotect

java - 反射性地检查对象是否是方法的有效泛型参数

如何使用反射检查给定对象是否是方法的有效参数(其中参数和对象是泛型类型)?为了获得一些背景知识,这就是我想要实现的目标:在玩反射方法调用时,我认为调用具有特定类型参数的所有方法会很好。这适用于原始类型,因为您可以调用isAssignableFrom(Classc)在他们的类对象上。但是,当您开始将泛型加入混合中时,突然变得不那么容易了,因为泛型不是反射原始设计的一部分,并且是因为类型删除。问题更大,但基本上归结为以下几点:理想的解决方案理想情况下的代码importjava.lang.reflect.*;importjava.util.*;publicclassReflectionAbu

java - JAXB:泛型的多态性

我正在尝试使用JAXB(在Jersey内部)通过泛型实现多态性:@XmlRootElementpublicclassPerformance{@XmlAnyElementprivateListmeasurement;}@XmlJavaTypeAdapter(MeasurementAbstract.Adapter.class)publicinterfaceIMeasurementextendsSerializable{DgetDate();voidsetDate(Ddate);VgetValue();voidsetValue(Vvalue);}@XmlTransient@XmlAccess

java - Number 子类的防御性复制

请考虑以下示例:publicfinalclassImmutableWrapper{privatefinalTvalue;publicImmutableWrapper(Tvalue){//asubclassofNumbermaybemutable//so,howtodefensivelycopyingthevalue?this.value=value;}publicTgetValue(){//thesamehere:howtoreturnacopy?returnvalue;}}为了使此类不可变,我必须防御性地复制传递给构造函数的任何可变参数,并创建公共(public)方法返回的内部可变对

java - 如何用更具体的类型替换参数化类型

考虑以下设置:我们有一个接口(interface)SuperType参数化如下:publicinterfaceSuperType{}SuperType支持方法链。因此它定义了另一个类型参数,它捕获每个方法返回的具体实现子类型,如下所示:publicinterfaceSuperType>{publicSdoSomething();}让我们考虑一个SuperType>的实现:publicclassSubTypeimplementsSuperType>{privatefinalVvalue;publicSubType(Vvalue){this.value=value;}publicSubTy

java - 静态成员中的泛型参数声明

为什么不允许定义这样的静态成员:privatestaticfinalMap,BiFunction>SPECIFIC_HANDLERS=newHashMap();相反,它只允许在未指定的情况下使用它:privatestaticfinalMap,BiFunction>SPECIFIC_HANDLERS=newHashMap();是否有解决方法,以便我可以定义BiFunction的两个参数必须是同一类型,并且Map的键必须是这些参数的类类型?更新澄清(因为@Mena的建议不适合我):我想要一个映射,用于通用equals助手的数组equals方法。通用助手正式接收两个对象。如果它们是数组,我必

java - Java 中 T(泛型)的实例

简而言之:为什么我不能用Java编写以下代码?publicclassFoo{publicvoidfoo(Objectbar){if(barinstanceofT){//todo}}}是的,我知道,泛型有点黑进了Java。泛型直到Java1.5才出现,泛型类型在运行时丢失。我也知道,它有一些模式。例如:publicclassFoo{Classclazz;publicFoo(Classclazz){this.clazz=clazz;}publicvoidfoo(Objectbar){if(clazz.isInstance(bar)){//todo}}}我的问题是,为什么它不由编译器自动完成

java - 不存在类型变量 T 的实例,因此 List<T> 符合 Integer

在下面的代码中:returnnewHashSet(namedParameterJdbcTemplate.query(SOME_SQL_QUERY_STRING,parametersMap,(resultSet,rowNum)->resultSet.getBigDecimal("GETID")));我在(resultSet,rowNum)->resultSet.getBigDecimal("GETID"))下看到一条红线和以下错误:Noinstance(s)oftypevariable(s)TexistsothatListconformstoInteger.有人可以帮我说说为什么会这样吗

java - 具有类型绑定(bind)的嵌套泛型导致编译错误

为什么会导致编译错误:Optional>a=Optional.of(Optional.of(1));Optional>b=a;而以下不是?:Optional>a=Optional.of(Optional.of(1));Optional>c=a.map(x->x); 最佳答案 尽管Optional是Optional的sybtype,Optional>不是Optional>的子类型.如果您尝试分配Optional,您将得到相同的编译错误。至Optional,即使Integer延伸Number.为了更好地理解它,请替换Optional蒙山

java - 如何使用带有通配符声明的泛型类?

我类有以下成员:Listlist;当我尝试做的时候:list.add(list.get(0));我得到:Test.java:7:error:nosuitablemethodfoundforadd(CAP#1)list.add(list.get(0));^methodCollection.add(CAP#2)isnotapplicable(argumentmismatch;ObjectcannotbeconvertedtoCAP#2)methodList.add(CAP#2)isnotapplicable(argumentmismatch;Objectcannotbeconvertedt