2013-04-25 24 views
0

假設我聲明一些抽象方法,將返回Class對象(如Dog.class,Cat.class),像這樣:我可以聲明方法來將具有限制的Class對象返回給Java中給定類型的子類嗎?

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 
} 

回答

1

可以Class改變返回類型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; 
} 
1
public Class<? extends Animal> getProducedType() { 
// return Integer.class; // compile time error: incompatible types 
    return Dog.class; 
} 
相關問題