繁体   English   中英

Java中具有特定类型的通用接口的实现

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

或者也许Dogpersontrain()方法应该接受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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM