[英]Implementation of generic interface with specific type in Java
考虑以下通用接口:
interface Petlover<T>{
void train(T somePet);
}
我知道可以为通用接口提供通用实现(例如, class MalePetLover<T> implements Petlover<T>
)。 但是我仅在为特定类型实现接口时遇到了麻烦:
class Dogperson implements Petlover<T> {
int age;
void train(String someDog){...};
}
编译错误是train(String) in Dogperson cannot implement train(T) in Petlover
。 什么是处理此问题的正确方法?
由于您希望train
接受一个String
,因此您的类应实现Petlover<String>
:
class Dogperson implements Petlover<String> {
int age;
public void train(String someDog) {...};
}
或者也许Dogperson
的train()
方法应该接受Dog
参数,然后该类将实现Petlover<Dog>
。
扩展泛型类的子类必须符合它在自己的声明中指定的类型。
您声明: class Dogperson implements Petlover<T> {
,因此train()
方法必须具有以下签名: void train(T someDog){...};
如果要在子类中具有此签名:
void train(String someDog){...};
您必须通过将String
类指定为参数化类型来声明实现PetLover
的子类:
class Dogperson implements Petlover<String> {
public void train(String someDog){...};
}
您可以指定任何参数,因为T
从接口中的Object派生的。
例如,如果要在子类中使用Dog作为类型,可以编写它:
class Dogperson implements Petlover<Dog> {
public void train(Dog dog){...};
}
例如,如果您想养一只猫,可以这样写:
class Catperson implements Petlover<Cat> {
public void train(Cat cat){...};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.