2010-03-30 45 views
8

我想创建一个具有两个参数的类。一个应该被简单地键入为T.另一个应该被键入为扩展T和SomeInterface<T>的东西。当我尝试这与在Java中扩展T和SomeInterface <T>

public class SomeClass<T, S extends SomeInterface<T> & T> 

那么Java与

抱怨“的类型T是不是一个接口;它不能被指定为一个有界参数”

和如果相反,我试图创建一个接口S采用

public interface TandSomeInterface<T> extends SomeInterface<T>, T 

那么Java抱怨与

“不能将类型参数T称为超类型”

有什么方法可以在Java中执行此操作吗?我认为你可以用C++做... ...?

+2

需要注意的是C++模板很多比Java泛型更强大。仅仅因为它可以用C++来完成,并不意味着它可以用Java来完成。 – 2010-03-30 08:35:00

+0

相关:http://stackoverflow.com/a/13261667/697449 – 2013-01-23 03:25:51

回答

3

由于没有保证T成为接口的合同,您无法创建扩展类型参数T的接口。当然,不允许扩展类的接口。

+0

但是有什么办法可以绕过这个来获得相同的效果吗? – 2010-03-30 08:52:07

3

这个作品,如果你扩展接口,以及:

public class SomeClass<T extends I, S extends SomeInterface<T> & I> 

但也许它不正是你想要的......

相关问题