2011-09-23 4 views
0

J'ai plus d'un arrière-plan .NET, donc j'ai eu du mal à trouver une méthode générique dont j'ai besoin en Java. Fondamentalement, j'ai une classe de base, appelez-le AbstractBase, dont les objets de mon domaine héritent de (appelez-les ClassA et ClassB). Je veux écrire une méthode qui retourne un type spécifique de AbstractBase avec un ID donné. Voici comment je pourrais le faire en C#:Méthodes génériques en Java

public T getById<T>(long id) where T : AbstractBase 
{ 
    if (T is ClassA) 
     // find and return object of type ClassA 
    else if (T is ClassB) 
     // find and return object of type ClassB 
    else 
     return null; 
} 

Je ne pense pas avoir ma tête entièrement enroulé autour de la façon dont Java ne génériques. Est-ce que quelque chose comme ça est possible avec Java? Quelle serait la meilleure approche?

+6

Oh, pauvre C# âme. Effacez le type - préparez-vous à pleurer. –

+1

@KirkWoll: +1 Je ne suis pas d'accord plus. : '( –

+0

tout le point du code générique est qu'il est "générique" c'est-à-dire qu'il ne dépend pas du type – newacct

Répondre

7
public <T extends AbstractBase> T getById(long id, Class<T> typeKey) { 
    if (ClassA.class.isAssignableFrom(typeKey)) { 
     // ... 
    } else if (ClassB.class.isAssignableFrom(typeKey)) { 
     // ... 
    } else { 
     // ... 
    } 
} 

ou si vous voulez correspondance exacte sur les classes (plutôt que d'être d'un type de sous-classe potentielle):

public <T extends AbstractBase> T getById(long id, Class<T> typeKey) { 
    if (typeKey == ClassA.class) { 
     // ... 
    } else if (typeKey == ClassB.class) { 
     // ... 
    } else { 
     // ... 
    } 
} 
+1

Oui, c'était ce que je cherchais Merci, Chris! Accepter comme réponse sous peu ... –

Questions connexes