Tag: generics

接受两种类型之一的generics类

我想创建一个这种forms的generics类: class MyGenericClass {} 问题是,我想接受T为Integer或Long,但不是Double。 所以只有两个可接受的声明是: MyGenericClass instance; MyGenericClass instance; 有没有办法做到这一点?

具有类型参数的Guice模块

我花了一些时间想知道是否可以编写一个guice模块,它本身是用类型T参数化的,并使用它的类型参数来指定绑定。 就像在这个(不工作)的例子中一样: interface A {} class AImpl implements A{} interface B {} class BImpl implements B {} class MyModule extends AbstractModule { @Override protected void configure() { bind(new TypeLiteral<A>(){}).to(new TypeLiteral<AImpl>(){}); bind(new TypeLiteral<B>(){}).to(new TypeLiteral<BImpl>(){}); } } 我尝试了不同的方法,尝试将T传递给MyModule作为Class / TypeLiteral的实例但没有一个工作。 帮助赞赏。 此致,ŁukaszOsipiuk

为什么List 不能作为List ?

考虑下面的方法doSomething(List)接受List作为参数。 private void doSomething(List list) { // do something } 现在考虑下面的代码片段,它尝试调用doSomething() ,我尝试将List传递给doSomething() List objectList; List stringList; doSomething(stringList); // compilation error incompatible types doSomething(objectList); // works fine 即使在代码下面也会引发编译错误 objectList = stringList; // compilation error incompatible types 我的问题是为什么List无法传递给接受List ?

如何在运行时从generics类型定义和运行时类型参数构建Java类型对象?

假设generics类型声明(Java) class Foo { public T bar; } 我怎样才能在运行时实例化一个Type对象,该对象表示在特定类型T上参数化的Foo(也仅在运行时知道)?

具有通用重载的Java擦除(不覆盖)

我的域名中有FinanceRequests和CommisionTransactions。 如果我有一个FinanceRequests列表,每个FinanceRequest可能包含多个需要回收的CommisionTransactions。 不要担心这是怎么做到的。 下面的课程(非常底部)让我觉得自己的模糊和温暖,因为它很好地重用了现有的代码。 一个问题类型擦除。 public void clawBack(Collection financeRequestList) public void clawBack(Collection commissionTrnsList) 它们在擦除后都具有相同的签名,即: Collection –> Collection Collection –> Collection 所以eclipse抱怨说: 方法clawBack(Collection)具有与CommissionFacade类型中的另一种方法相同的擦除clawBack(Collection) 有没有重构这个的建议,以便它仍然是一个优秀的解决方案,可以很好地重用代码? public class CommissionFacade { /********FINANCE REQUESTS****************/ public void clawBack(FinanceRequest financeRequest) { Collection commTrnsList = financeRequest.getCommissionTrnsList(); this.clawBack(commTrnsList); } public void clawBack(Collection financeRequestList) { for(FinanceRequest finReq : financeRequestList) { this.clawBack(finReq); } } /********COMMISSION TRANSACTIOS****************/ […]

Javagenerics,嵌套的通配符集合

编译(1.6) List l = new ArrayList(); 但事实并非如此 List<List> ll = new ArrayList<List>(); 有错误的 Type mismatch: cannot convert from ArrayList<List> to List<List> 有人可以解释原因吗? 谢谢 编辑:编辑为后续

Java比较generics类型

在Java中,我编写了一个二进制搜索树类,它使用递归添加节点。 现在我想使用generics来概括它,以便我可以更多地了解它们。 public class GBinNode { T item; GBinNode left; GBinNode right; public GBinNode(T newItem) { item = newItem; left = null; right = null; } public GBinNode(T it, GBinNode le, GBinNode ri) { item = it; left = le; right = ri; } public String toString() { return item.toString()+” “; } } 我添加节点的function在以下类中 public […]

Java if三元运算符和Collections.emptyList()

你能解释为什么第一个返回类型的代码无法编译? 消息是: Type mismatch: cannot convert from List to List Type mismatch: cannot convert from List to List 。 在第二种情况下是否插入了显式转换? public class GenericsTest { private String getString() { return null; } public List method() { String someVariable = getString(); //first return type //return someVariable == null ? Collections.emptyList() : Collections.singletonList(someVariable); //second return type if (someVariable […]

如何引用接口在Java中实现的类类型?

我遇到了我正在制作的程序中的接口问题。 我想创建一个接口,它的一个方法接收/返回对自己对象类型的引用。 它是这样的: public interface I { ? getSelf(); } public class A implements I { A getSelf() { return this; } } public class B implements I { B getSelf() { return this; } } 我不能使用“I”,它是“?”,因为我不想返回对接口的引用,而是类。 我搜索并发现Java中没有办法“自我引用”,所以我不能只用“?”来代替它。 在“自我”关键字或类似的示例中。 实际上,我想出了一个类似的解决方案 public interface I { SELF getSelf(); } public class A implements I { A getSelf() […]

获取generics类的通用参数的类型名称

在使用generics时我在java中遇到一个小问题。 我有一个A类: public class A 在A的方法中,我需要获取T的类型名称。 有没有办法用T找到字符串? (如果我创建A temp = new A();我希望能够在某一点获得java.lang.String – 我必须使用generics,因为我的一个方法必须返回一个List )。 这似乎很容易,但我不知道该怎么做。