2012-01-25 8 views
3

だユーザーは、彼らが渡されたどんなクラスのGameComponentを見つけるために、GameComponentsのリストを検索することができますメソッドを作成することです。それによってコンポーネントを取得する私は何をしようとしているジェネリック型

Iこれをどうやって行うのか全然迷っています。何か案は?

これはこれまで私が試したことです。私はそれを行うためのさまざまな方法を試してきましたが、私は続けるclassDudeはタイプに解決することはできません。前もって感謝します。

public <T extends GameComponent<?>> T getComponentOfType(Class<T> classDude) 
{ 
    for(GameComponent<?> gC : components) 
    { 
     if(classDude.isInstance(gC)) 
     { 
      return classDude.cast(gC); 
     } 
    } 
    return null; 
} 

をそれともジェネリックにすることなく:

public GameComponent<?> getComponentOfType(Class<Object> classDude) 
    { 

     for(GameComponent<?> gC : mComponentList) 
     { 
      if(gC instanceof classDude) 
      { 

      } 
     } 

    } 

答えて

4

それはあなたが望むように聞こえる

public GameComponent<?> getComponentOfType(Class<?> classDude) 
{ 
    for(GameComponent<?> gC : components) 
    { 
     if(classDude.isInstance(gC)) 
     { 
      return (GameComponent<?>) classDude.cast(gC); 
     } 
    } 
    return null; 
} 

を言い換えれば、あなたが欠落していたものをClass.isInstanceClass.cast方法がなかったです。

+0

このように関数自体を見たい場合は、どうすればよいでしょうか。 – TylerKinkade

+0

getComponent (); – TylerKinkade

+0

@ user1159418:あなたはJavaでジェネリックメソッドを呼び出す方法ではなく、クラスを提供する*を持っています。それ以外の場合は、erasureがあなたにヒットします。しかし、あなたは 'getComponent(TextureComponent.class)'を使うことができます。 –

関連する問題