草庐IT

Generics

全部标签

Java 泛型 : how to get a generic type from a method?

虽然我的问题是关于Java泛型的,但我已经放了一些与JPA相关的代码来向您展示真实的上下文。我正在使用JPA2.0和基于CriteriaAPI的查询。我所有的查询都遵循相同的模式(比较简单的属性;不需要路径导航),所以我试图编写一个通用类来处理JPA,同时将业务逻辑保留在单独的类中。我的目标是有一个方法,给定一个实体类型和一个存储定义标准的对(字段名称->期望值)的映射,返回一个具有某些实体字段值的bean(或bean集合).我所有的实体都实现了Persistible接口(interface),而我所有的传输对象都继承自QueryBean.我认为那些类与问题无关,因此我跳过了它们的代码

Java:建立类型参数之间的关联

假设我们有两个通用Java接口(interface):Foo和Bar,其中可能有很多实现。现在,假设我们想将每一个都存储在一个类中,两者使用相同的T值。,但保留输入的确切实现:publicinterfaceFooBar,TBarextendsBar>{TFoogetFoo();TBargetBar();}以上,T仅用于强制执行TFoo和TBar的类使用相同的类型参数。将此类型参数添加到FooBar似乎多余有两个原因:FooBar实际上并不关心T完全没有。即使有,T可以从TFoo推断出和TBar.因此,我的问题是,是否有一种方法可以在不造成困惑的情况下执行这样的条件FooBar的类型参数

Java 泛型不一致的行为?

为什么第一个方法可以编译,而第二个不能?Set和ImmutableSet.Builder的泛型相同,它们的add方法的类型签名也相同。importjava.util.Set;importjava.util.HashSet;importcom.google.common.collect.ImmutableSet;publicclassF{publicstaticImmutableSettestImmutableSetBuilder(){ImmutableSet.Builderbuilder=ImmutableSet.builder();Numbern=Integer.valueOf(4)

java - Spring MVC : Generic DAO and Service classes

我正在使用SpringMVC编写Web。我使用GenericDAO编写了所有DAO。现在我想重写我的服务类。如何编写“通用服务”?有我的DAO:/*#################################DAO################################*/packagenet.example.com.dao;importjava.util.List;publicinterfaceGenericDao{publicTfindById(intid);publicListfindAll();publicvoidupdate(Tentity);publicvoi

java - 泛型方法调用

我有这段代码来自“Java-初学者指南-Schildt”,第13章:packagecom.chapter.thirteen;publicclassGenericMethodDemo{static,VextendsT>booleanarraysEqual(T[]x,V[]y){if(x.length!=y.length)returnfalse;for(inti=0;i编译失败并显示消息-“错误:(39,12)java:类com.chapter.thirteen.GenericMethodDemo中的方法arraysEqual不能应用于给定类型;需要:T[],V[]找到:java.lang

java - 为什么 lambda 类型推断失败,但等效方法引用成功?

我正在使用lambda在下面的Java程序中实现功能接口(interface)。当lambda作为参数传递给泛型方法时,编译器会标记“不兼容类型”错误,因为它推断lambda实现了Func接口(interface),该接口(interface)让编译器将lambda参数(“thing”)解释为当lambda尝试将其传递给需要Round类型参数的方法(testRound)时,它属于Shape类型。这个错误对我来说很有意义。但等效方法引用不会引发错误消息。我一直误以为lambda和可以替换该lambda的方法引用是可以互换的。在这里,事实并非如此。publicclassMain{publi

java - 使用泛型和 lambda 重载方法时调用方法不明确

我注意到使用泛型和lambda重载方法时有一种奇怪的行为。这个类工作正常:publicvoidtest(Tt){}publicvoidtest(Suppliert){}publicvoidtest(){test("test");test(()->"test");}没有模棱两可的方法调用。但是,将其更改为此会使第二个调用不明确:publicvoidtest(Classc,Tt){}publicvoidtest(Classc,Suppliert){}publicvoidtest(){test(String.class,"test");test(String.class,()->"test"

java - 通用类型 toArray 和 asList

我试图理解泛型,并且我有意想要生成一个类转换异常,但是,我在第一次尝试时却得到了一个数组存储异常。staticEreduce(Listlist,Functionf,EinitVal){E[]snapshot=(E[])list.toArray();Object[]o=snapshot;o[0]=newLong(1);Eresult=initVal;for(Ee:snapshot)result=f.apply(result,e);returnresult;}privatestaticfinalFunctionSUM=newFunction(){publicIntegerapply(Int

java - 在通用上下文中使用 getActualTypeArguments

还有其他相关问题,例如6624113,3403909,4516891但我的问题更简单也更具体。我想在运行时知道我的类被参数化的类型-我想要一个类型参数类型的Class对象。由于类型删除,表达式T.class不起作用,并且C#中没有类似typeof(T)的函数来获取它。但是,通过ParameterizedType可以获得一些“super反射”和相关类(class),这让我几乎一路走来。importjava.lang.reflect.ParameterizedType;publicclassMyClass{publicstaticvoidmain(String[]args){newMyCl

java - 为什么 Map.containsKey() 采用 Object 参数而不是特殊类型?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:WhatarethereasonswhyMap.get(Objectkey)isnot(fully)genericJavaGenerics:WhyDoesMap.get()IgnoreType?JavaMap接口(interface)声明如下:InterfaceMap它有这样一个方法:booleancontainsKey(Objectkey)为什么不呢booleancontainsKey(Kkey)?相反,List接口(interface)有add方法,该方法采用泛型参数而不是Object:booleanad