我的目标是:我希望有一个参数需要同时是两种不同的类型。
这里的目标是仅使用泛型(没有强制转换或instanceof
)从单个对象中提取两种不同的类型。
我的想法是有第三个类型参数,extends
其他两个。
class DualType<A, B> {
A a;
B b;
<T extends A & B> DualType(T obj) {
a = obj;
b = obj;
}
}
这不起作用。由于java不支持多重继承,并且编译器无法保证B不是另一个类,因此会得到一个错误。
我的问题是:是否有某种方法可以定义一个类型参数,限制它只能与接口一起使用?我假设您可以使用implements
而不是extends
,但我们都知道,只有super
和extends
在类型参数声明中有效。有解决这个问题的方法吗?还是根本不可能?
我想实现的东西在这里并不适合一些实用的目的,但我很想知道类似于Java这是可能的吗?
是否有某种方法来定义一个类型参数,限制它只能与接口一起使用?
编译器无法知道A
和B
是接口还是类,因为这些类型变量只是占位符,实际类型将在运行时提供。
由于类型变量T
有多个边界<T extends A & B>
,只有A
可以是一个类,B
应该是一个接口。但是B
几乎可以是任何东西,因此构造函数会导致编译错误。
只有"super"one_answers";extends"在类型参数声明中有效
这是不对的。super
只能用于通配符,不能用于有界类型。T super MyInterface
将无法编译。对于有界类型形参,我们只能使用extends
。
并且不可能通过使用extends
让编译器知道B
是一个接口。即使bound是一个接口B extends MyInterface
,也不意味着B
也应该是一个接口。
没有办法实现你想要做的事。