2016-12-15 11 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; 
    } 
} 

は、今では必要に応じて1がTであると見られるものがオブジェクトであることリターンで言っています。

エラーメッセージは次のとおりです。必要な 「互換性のないタイプ:Javaは何を知らないので、Tはjava.lang.Objectの

を見つけた私は、それは動作しません右の構文に

+1

ポストコンパイル・エラーの原因となったコード、そして正確かつ完全な誤りである必要があります。 –

+0

"?????"のために何かを記入することは可能ではありませんこれは完全な型セーフです。あなたはチェックされていないキャストが必要です。 – Jesper

答えて

0

を知りませんTのタイプがある。可能な解決策の

一つだけAnimalを返すようにしている。この場合は、あなたが任意の鋳造を必要としません。

public Animal getAnimal(String animal, Animaltype animaltype) 

また、Animaltype animaltypeではなくClass<T>をメソッドに渡すことによって、Tの型を指定することができます。

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

しかし、また、あなたの列挙型のフィールドenumClassClass <? extends Animal> enumClass;

関連する問題