簡體   English   中英

我可以聲明方法來返回Class對象,並限制Java中給定類型的子類嗎?

[英]Can I declare method to return Class object with restriction to subclasses of given type in Java?

假設我聲明了一些抽象方法,它將返回Class對象(如Dog.class,Cat.class),如下所示:

abstract public Class getProducedAnimalType();

我可以強制擴展此API的客戶端只返回表示類的Class對象,它們是Animal.class的子類嗎? 就像是:

abstract public Class<representing subclass of Animal> getProducedAnimalType();

所以擴展我的類的客戶端不能寫:

public Class getProducedAnimalType() {
   // Integer not extends Animal!, shoud not compile!
   return Integer.class; 
}

但可以:

public Class getProducedAnimalType() {
   return Fish.class; // Fish extends Animal
}

您可以將返回類型Class更改為Class<? extends Animal> Class<? extends Animal> 以下代碼將允許返回Cat.classDog.class ,但不允許返回Integer.class

abstract public Class<? extends Animal> getProducedAnimalType();

客戶端可以編寫以下代碼並編譯正常:

public Class<? extends Animal> getProducedAnimalType() 
{
   return Fish.class; // Fish extends Animal
}

但是以下代碼將無法編譯:

public Class getProducedAnimalType() 
{
   return Integer.class; 
}
public Class<? extends Animal> getProducedType() {
// return Integer.class; // compile time error: incompatible types
    return Dog.class;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM