草庐IT

Generics

全部标签

java - 泛型类型推断失败?

例子A研究以下片段:publicclassExampleA{staticclassPair{}staticPairanyPair(){returnnull;}staticvoidprocess(Pairp1,Pairp2){return;}publicstaticvoidmain(String[]args){Pairp=anyPair();process(p,anyPair());//doesn'tcompile}}有人可以解释为什么类型推断适用于局部变量p的赋值,但不适用于process的第二个实际参数吗?例子B这可能更容易理解:publicclassExampleB{publics

java - 在接口(interface)扩展中指定泛型

当用另一个接口(interface)扩展一个接口(interface)时,我应该为泛型类型指定具体类型吗?我的意思是,如果我有一个接口(interface):publicinterfaceRepo{Collectionsearch(Stringparams);Tget(Stringid);}然后是一大堆特定的Repositories,比如ClientRepo、CustomerRepo等......在什么时候指定类型T是否合理扩展此接口(interface),例如:publicinterfaceClientRepoextendsRepo{}publicinterfaceCustomerR

java泛型通配符

我有一个关于在Java的泛型类型中使用通配符的问题:List之间的基本区别是什么?和List?我什么时候使用? 最佳答案 两个原因:为避免不必要的转换:对于这种情况,您必须使用T变体:publicTfirstOf(Listl){returnl.get(0);}使用?这将变成:publicSetfirstOf2(Listl){returnl.get(0);}...它不会向firstOf方法的调用者提供相同数量的信息。第一个版本允许调用者这样做:SubSetfirst=firstOf(listOfSubSet);而对于第二个版本,您被迫

java - 泛型 - (elements instanceof List<? extends Comparable>) 的合法替代品

我有一个唯一参数(Listelements)将元素设置为ListModel的方法,但我需要进行验证以查看通用类型是否实现了可比性,因为这样的事情:if(elementsinstanceofList)是非法的,我不知道如何进行正确的验证。更新我已经使用以下方法完成了此验证:(elements.size()>0&&elements.get(0)instanceofComparable)但我想知道是否有更清洁的解决方案,例如使用反射?提前致谢。 最佳答案 列表的通用类型是erasedatruntime.为此,您需要在方法签名中要求参数或单

java - 从 scala 调用重载的 java 泛型方法

我正在使用Mockito通过返回未参数化ArrayList的方法来模拟对象,但我不知道如何让它工作要模拟的方法签名publicjava.util.ArrayListgetX()测试代码varmockee=mock(classOf[Mockee])when(mockee.getX).thenReturn(Lists.newArrayList(x):ArrayList[_])这实际上在IntelliJ中编译得很好,但在运行时抛出:[error]....scala:89:overloadedmethodvaluethenReturnwithalternatives:[error](java.

java通用字符串到<T>解析器

是否有直接的方法来实现具有以下签名的方法?至少,实现需要处理基本类型(例如Double和Integer)。非基本类型将是一个不错的奖励。//AttempttoinstantiateanobjectoftypeTfromthegiveninputstring//ReturnadefaultvalueifparsingfailsstaticTfromString(Stringinput,TdefaultValue)对于实现了FromString接口(interface)(或等效接口(interface))的对象来说,实现是微不足道的,但我还没有找到任何这样的东西。我也没有找到使用反射的功能

java - Java 中的泛型方法和类型推断

给定以下不是很有用的代码:packagecom.something;importjava.util.ArrayList;importjava.util.Collection;//Notagenericclass!publicclassTest{publicvoidplain(Tparam1,Tparam2){}publicvoidfancy(Tparam1,Collectionparam2){}publicvoidtestMethod(){//Noerrorfancy("",newArrayList());//Compilererrorhere!fancy("",newArrayLis

java - 类型 T 不是通用的;它不能用参数 <?> 泛型函数中的错误进行参数化

我想创建一个接受任何映射和字符串键的通用函数,如果键不存在于映射中,那么它应该创建一个值类型的新实例(已传递)并将其放入映射然后返回它。这是我的实现publicTgetValueFromMap(Mapmap,Stringkey,ClassvalueClass){Tvalue=map.get(key);if(value==null){try{value=valueClass.newInstance();}catch(InstantiationExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(Illeg

java - 在 Guava 中,为什么在可能使用 "T"的地方只使用 "? super T"?

为什么实用程序工厂方法经常使用特定的通用参数(如T)而不是有界通配符参数(如?superT)?例如Functions#forPredicate的签名是:publicstaticFunctionforPredicate(Predicatepredicate)为什么不使用:publicstaticFunctionforPredicate(Predicatepredicate)哪个可以使类似下面的事情成为可能?PredicateisPositivePredicate=...FunctionisPositiveInteger=Functions.forPredicate(isPositiveP

java - 如何使用 QueryDSL 构建 GenericDao?

首先,我是QueryDSL的新手。我正在使用Spring+Hibernate环境。我面临的问题是构建一个GenericDAO来实现所有基本的CRUD操作,但我不确定如何从QEntity获取静态引用。我的实体类结构如下所示:@Entity//jpapublicclassEntityextendsAbstractEntity{//fields...}publicabstractclassAbstractEntity{//Logger}QueryDSL生成实体的基本结构publicclassQEntityextendsPEntity{...publicstaticfinalQEntityen