J'ai une classe appelée DataSet avec différents constructeurs, chacun spécifiant un type de variable différent. Cela peut sembler un peu comme ceci:Java: Problème avec les génériques et la détection du type de collection
public class DataSet
{
private HashSet Data;
public DataSet(DataObject obj)
{
Data = new <DataObject>HashSet();
Data.add(obj);
}
public DataSet(ObjectRelationship rel)
{
Data = new <ObjectRelationship>HashSet();
Data.add(rel);
}
// etc.
Note: Je ne l'ai pas encore appris à tester ce code en raison de pièces incomplètes (dont je suis la construction en ce moment).
Dans une fonction que je suis en train de construire, getDataObjects()
, j'ai besoin de retourner tous les objets DataObject que cet ensemble représente. Dans le cas des constructeurs qui initient le HashSet de la classe, Data
avec des types autres que DataObject
(tels que ObjectRelationship
ci-dessus), il n'y aura évidemment aucun DataObjects stocké dans. Dans ce cas, je dois être capable de détecter le type avec lequel le 'Data' HashSet a été initié (comme, pour dire si c'est 'ObjectRelationship' ou non, je veux dire). Comment puis-je faire cela?
tl; dr: Comment puis-je dire le type d'une collection (dans ce cas, un HashSet) a été lancé dans mon code (comme avec une déclaration 'si' ou 'switch' ou quelque chose)?
Ne pas utiliser de génériques conduirait exactement au même problème. – Loki
Il semble que vous mettez en place une sorte de collection. Peut-être que vous pourriez étudier le code source des autres classes de collecte pour avoir une idée de la façon d'atteindre votre objectif? – Loki
Je ne fais qu'emballer HashSet pour faire quelque chose de spécifique avec ça. Ce n'est pas vraiment un nouveau type de collection, mais je suppose que je pourrais faire comme ça. Cependant, sa fonctionnalité sous le capot fonctionne différemment selon le type de données qui lui est donné. J'utilise seulement une poignée de types spécifiques, aussi. –