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