Java中特定类型泛型接口的实现
考虑以下通用接口:Java中特定类型泛型接口的实现,java,generics,Java,Generics,考虑以下通用接口: interface Petlover<T>{ void train(T somePet); } interface-Petlover{ 无效列车(T-somePet); } 我知道可以为通用接口提供通用实现(例如,类MalePetLover实现Petlover)。但我无法仅为特定类型实现接口: class Dogperson implements Petlover<T> { int age; void train(Stri
interface Petlover<T>{
void train(T somePet);
}
interface-Petlover{
无效列车(T-somePet);
}
我知道可以为通用接口提供通用实现(例如,类MalePetLover实现Petlover
)。但我无法仅为特定类型实现接口:
class Dogperson implements Petlover<T> {
int age;
void train(String someDog){...};
}
类Dogperson实现Petlover{
智力年龄;
空列(字符串someDog){…};
}
编译错误是Dogperson中的
train(String)无法在Petlover中实现train(T)
。处理这个问题的正确方法是什么?既然您希望train
接受字符串,那么您的类应该实现Petlover
:
类Dogperson实现Petlover{
智力年龄;
公共无效列车(字符串someDog){…};
}
或者,Dogperson
的train()
方法应该接受一个Dog
参数,然后类将实现Petlover
扩展泛型类的子类必须符合它在自己的声明中指定的类型。
您声明:class Dogperson实现了Petlover{
,因此train()
方法必须具有以下签名:void train(T someDog){…};
如果您希望在子类中具有此签名:
void train(String someDog){...};
必须通过将String
类指定为参数化类型来声明实现PetLover
的子类:
class Dogperson implements Petlover<String> {
public void train(String someDog){...};
}
例如,如果你想要一只猫,你可以写:
class Dogperson implements Petlover<Dog> {
public void train(Dog dog){...};
}
class Catperson implements Petlover<Cat> {
public void train(Cat cat){...};
}
类Catperson实现Petlover{
公共无效列车(Cat){…};
}
实现宠物情人
?你应该澄清你在这里想要达到的目的。字符串
是一只狗的名字。我尝试了宠物情人
,但没有效果(请参见下面的Eran回答)-编译器输出了相同的错误。在将T
更改为String
后,我似乎得到了相同的错误,正如您所建议的:error:Dogperson中的train(String)无法实现train(T)在Petlover中
。是的,最好使用狗
对象,但为了简单起见,我将其保留为字符串
。@flow2k它为我通过了编译。您只需将公共
访问修饰符添加到火车()
method.Ah-好的。我在你的回答中漏掉了。谢谢。旁注:你应该遵循Java命名约定。@LewBloch你是指CamelCase吗?就像在另一个答案中提到的Eran一样,Dogperson和Catperson类中的train
方法必须是public
@Erwin Bolwidt True。接口方法必须是public方法.我们以前会看到的。
class Catperson implements Petlover<Cat> {
public void train(Cat cat){...};
}