java - 我有一个带有 1 个 setter 方法的抽象类 - 参数是一个对象。我想要一个通用的 <T> 参数,它采用扩展它的类的类型

标签 java class generics types abstract

我想要什么:

我想要一个泛型来扩展抽象类“DogKennel”,而不是“public void insertDog(Object object)”方法中的“Object”。例如,如果我创建一个名为“RetrieverDogKennel”的类来扩展“DogKennel”,我希望“RetrieverDogKennel”类的“insertDog(...)”方法中的参数仅接受“Retriever”对象。虽然它看起来不像“insertDog(Retriever检索器)”,但该方法的行为会像它一样,只允许在其参数中包含检索器对象。

public abstract class DogKennel
{

   public void insertDog(Object object)
   {

   //does something and the object is not stored

   }

}

public class RetrieverDogKennel extends DogKennel
{

   public <T extends Retriever> void insertDog(T object)
   {

   //does something and the object is not stored

   }

}

如果您尝试将其他狗品种放入 RetrieverDogKennel,我希望这是一个错误。

LabradorDogKennel labradorDogKennel = new LabradorDogKennel();
RetrieverDogKennel retrieverDogKennel = new LabradorDogKennel();

Labrador bullet = new Labrador(); 
Retriever buster = new Retriever();
Retriever sparky = new Retriever();



//No Error
retrieverDogKennel.insertDog(buster);

//Error
retrieverDogKennel.insertDog(bullet);

最佳答案

已更新

您需要使两个类通用,而不是子类方法:

public interface Dog {
}

public class Labrador implements Dog
{
}

public abstract class DogKennel<T extends Dog> {

    public void insertDog(T dog) {
        //does something and the dog is not stored
    }

}

public final class RetrieverDogKennel extends DogKennel<Retriever> {
}

public final class GeneralDogKennel extends DogKennel<Dog> {
}

使用该代码,RetrieverDogKennel 类具有一个 insertDog(Retriever dog) 方法,其实现继承自基类。

GeneralDogKennel 类有一个 insertDog(Dog dog) 方法,即它可以接受任何类型的狗。

关于java - 我有一个带有 1 个 setter 方法的抽象类 - 参数是一个对象。我想要一个通用的 <T> 参数,它采用扩展它的类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56605839/

相关文章:

java - 为什么图片不显示在 java 的 swing 中?

arrays - 如何扩展特定类型数组的数组功能?

java - 使用 Java 从 Excel 读取多种语言

java - 带有 JSON 列的 CSV

java - Java:数组操作函数中的错误

c++ - 访问子类变量的正确解决方案是什么?

forms - Delphi-TForm和泛型

java - 将原始 vector 转换为类型安全列表(Arraylist)的最佳方法是什么

java - 了解 Java 泛型类型

java - Netbeans:尝试加载文件但未找到(Java)