我在实现抽象类时遇到了问题。我在AbstractClass中声明了一个带有List作为参数的抽象方法,但是当我实现它时,它给了我编译错误,说我没有正确实现抽象cass im扩展。
public abstract class MyAbstractClass<T> {
abstract protected List<T> MyMethod(List<String> list);
}
public class MyClass<MyObject> extends MyAbstractClass {
@Override
protected List<MyObject> MyMethod(List<String> list){
//Do Stuff
}
}
每当我自动实现它时,List<String>
只会List
。
这有什么理由吗?感谢。
答案 0 :(得分:1)
我相信你想要的是:
public class MyClass extends MyAbstractClass<MyObject> {
@Override
protected List<MyObject> MyMethod(List<String> list){
//Do Stuff
}
}
答案 1 :(得分:1)
我想你想说
public class MyClass extends MyAbstractClass<MyObject>
表示MyClass
使用MyObject
作为参数T
。
你所说的是MyClass
有一个类型参数,它与基类的类型参数T
没有关系。因此,在这种情况下,MyAbstractClass
引用可能指向MyClass
实例,该引用的用户无需知道他们有MyClass
因此不能被{T
约束1}}必须是MyClass
。
答案 2 :(得分:0)
将其更改为
extends MyAbstractClass<MyObject>
在Eclipse中测试它并且有效。
它似乎也是逻辑,因为超类只能知道你想要返回的类型。如果你不给它一个类型,它必须概括。
答案 3 :(得分:0)
问题含糊不清所以我回答了两个可能的案例
MyObject是一个类
public class MyClass extends MyAbstractClass<MyObject> {
@Override
protected List<MyObject> MyMethod(List<String> list) {
// do stuff
}
}
您使用MyObject作为通用名称并将其命名为, 相同类型将传递给父级,如下所示
public class MyClass<MyObject> extends MyAbstractClass<MyObject> {
@Override
protected List<MyObject> MyMethod(List<String> list) {
// do stuff
}
}