Dynamique Générique en Tapant Java

Si j'ai une classe à l'aide de type générique comme

public class Record<T> {
    private T value;

    public Record(T value) {
        this.value = value;
    }
}

il est assez simple de type tout au long de la conception du temps, si je sais que tous les types qui sont utilisés, comme c'est le cas dans cet exemple:

//I type explicitly
String myStr = "A";
Integer myInt = 1;
ArrayList myList = new ArrayList();

Record rec1 = new Record<String>(myStr);
Record rec2 = new Record<Integer>(myInt);
Record rec3 = new Record<ArrayList>(myList);

Qu'advient-il si je reçois une liste d'objets à partir de "quelque part" où je ne sais pas le type? Comment puis-je attribuer le type:

//now let's assume that my values come from a list where I only know during runtime what type they have

ArrayList<Object> myObjectList = new ArrayList<Object>();
    myObjectList.add(myStr);
    myObjectList.add(myInt);
    myObjectList.add(myList);

    Object object = myObjectList.get(0);

    //this fails - how do I do that?
    new Record<object.getClass()>(object);
  • Les génériques est pour le moment de la compilation, le typage fort. C'est assez inutile si vous n'avez pas d'idée sur le type que vous essayez d'en déduire. Vous devez concevoir de telle manière qu'il y a au moins connu une interface ou une classe de base que vous pouvez utiliser. Vous pourriez faire new Record<Object>(object), je suppose.
InformationsquelleAutor Jack Gibson | 2011-09-08