2012-01-25 5 views
3

Ce que je suis en train de faire est de créer une méthode qui permet à un utilisateur de rechercher une liste de GameComponents pour trouver un GameComponent de quelque classe qu'ils passent dans.Obtenir un composant par son type générique

I suis à une perte totale sur la façon de le faire. Des idées?

C'est ce que j'ai essayé jusqu'ici. J'ai essayé beaucoup de manières différentes de le faire mais je continue à obtenir classDude ne peut pas être résolu en un type. Merci d'avance.

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

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

      } 
     } 

    } 

Répondre

4

On dirait que vous voulez:

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

Ou sans en faire générique:

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

En d'autres termes, ce que vous manquez étaient les méthodes Class.isInstance et Class.cast.

+0

Si je voulais que la fonction elle-même ressemble à ceci, comment pourrais-je procéder: – TylerKinkade

+0

getComponent (); – TylerKinkade

+0

@ user1159418: Vous ne pouvez pas - ce n'est tout simplement pas la façon dont vous invoquez des méthodes génériques en Java, et vous * devez * fournir la classe, sinon l'effacement de type vous frappe. Vous pouvez cependant utiliser 'getComponent (TextureComponent.class)'. –

Questions connexes