在子类中重新定义泛型类型

时间:2014-11-11 15:31:26

标签: java

有没有办法扩展为泛型类型定义类的类,但是为子类中的类型赋予了新的定义?

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));
    }
}

2 个答案:

答案 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不接受参数。