How do you instantiate a Java generics Object that takes type parameters given only a Class
or Class<?>
object?
For example: Normally one can instantiate an ArrayList
of Integer
objects using the following syntax:
ArrayList<Integer> foo = new ArrayList<Integer>();
However, given a Class<?>
object such as Integer.class
, how could one create a similar ArrayList
? For example, how would I do something like this (incorrect syntax):
ArrayList<Integer.class> foo = new ArrayList<Integer.class>();
I need this for something very unusual I am doing with Java (Creating an open-source tool for visualizing user-supplied instances of data structure/ generic classes they write). Here is an example of how I would be using this code which illustrates the information I would be given:
import java.util.ArrayList;
import java.util.List;
public class ArrayListFromClass {
// obviously this code does not work
public static void main(String[] args) {
Object givenObject = new Integer(4);
// I would not know it is Integer.class, a Class<?> object would be supplied by the user/ as a generic
Class<?> cls = givenObject.getClass();
List<cls> bar = new ArrayList<cls>();
// Where args[0] is "Integer.class"
List<args[0]> foo = new ArrayList<args[0]>();
// then I would be able to add to foo or bar with one or both of these techniques:
// printing givenObject.getClass() gives you java.lang.Integer, don't worry about the casting not working.
bar.add(cls.cast(givenObject));
Integer y = 6;
bar.add(y);
}
}
Aucun commentaire:
Enregistrer un commentaire