有没有办法扩展为泛型类型定义类的类,但是为子类中的类型赋予了新的定义?
abstract class A<T>{
abstract public void foo(T input);
}
class B extends A<Integer>{
public void foo(String input){ ...}
}
class C extends B<String>{
public void foo(String input){
//.. convert int to string
super.foo(Integer.valueof(input));
}
}
答案 0 :(得分:3)
这是不可能的。
如果某个类是B
,那么它会提供foo(Integer)
方法。 C
不会这样做,因此不能用作B
。
尝试在行间读取,似乎你想要像一样行动的东西,除了它需要字符串而不是整数。在这种情况下,A
是常见的联系 - 您需要使用foo
方法的任何类型的东西。当你想要一个基于字符串的等效B
时,你真的在寻找一个A<String>
,而C
可以做这个工作。
一个简单的定义可能是:
class C extends A<String> {
private final B delegate; // Set up in constructor or whatever
public void foo(String input) {
//.. convert int to string
delegate.foo(Integer.valueof(input));
}
}
答案 1 :(得分:0)
class B extends A<Integer>{
public void foo(String input){ ...}
}
无法编译。 B
必须有方法
public void foo(Integer input)
进一步
class C extends B<String>
是不可能的,因为B
不接受参数。