我想要什么:
我想要一个泛型来扩展抽象类“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/