2016-12-15 82 views
0

我想我的泛型方法接收一个枚举类型,其中包含我想从方法返回的类。通用方法接收泛型枚举

所以这是多远我得到了(例如):

public class Zoo { 
    public Monkey apu; 
    public Lion simba; 
    public Bird zazu; 

    public <T extends Animal> T getAnimal(String animal, Animaltype animaltype){ 
     switch(animal){ 
     case "apu": 
      return animaltype.getType().cast(zoo.feedAnimal(animaltype.getType())) 
     case "simba": 
      return ?????????????? 
     case "zazu": 
      return ?????????????? 
     } 
    } 
} 

public enum Animaltype { 
    MONKEY(Monkey.class), 
    LION(Lion.class), 
    BIRD(Bird.class); 

    Class <?> enumClass; 

    Animaltype(Class<?> enumClass) { 
     this.enumClass = enumClass; 
    } 

    public Class<?> getType(){ 
     return this.enumClass; 
    } 
} 

现在是在回报所需要的一个是T和发现一个对象说。

错误消息是: “不兼容的类型要求:t上找不到java.lang.Object继承

我不知道正确的语法

+1

帖子引起编译错误的代码,并准确和完整的错误。 –

+0

这是不可能填写的东西的“?????”这是完全类型安全的。你需要一个未经检查的演员。 – Jesper

回答

0

它不工作,因为Java不知道是什么是的T类型。

其中一个可能的解决方案是只返回Animal。在这种情况下,你不需要任何铸造。

public Animal getAnimal(String animal, Animaltype animaltype) 

此外,您可以通过将Class<T>传递给方法而不是Animaltype animaltype来指定T的类型。

public <T extends Animal> T getAnimal(String animal, Class<T> animaltypeClass){ 
     switch(animal){ 
     case "apu": 
      return animaltypeClass.cast(zoo.feedAnimal(animaltypeClass)) 
     ... 
     } 
    } 

而且场enumClass在枚举应该是Class <? extends Animal> enumClass;