How to Get class of Elements that List Contains?

前端 未结 4 384
醉梦人生
醉梦人生 2021-01-18 01:47

I have a list like that:

private List myList = new ArrayList();

I want to get the .class of T. How can I do that?

4条回答
  •  余生分开走
    2021-01-18 02:15

    Why do you need to know this? Perhaps this will do what you need

    // must be at least one element (and all elements are the same)
    Class elementType = myList.get(0).getClass(); 
    

    The only way to do this is to either

    • store the type in a field and add a getter method for this.

    like

    private final Class type;
    private final List list = new ArrayList();
    
    public Class getType() { return type; }
    
    • use getGenericType() on the actual field, assuming the parameter type is NOT generic.
    • use a sub class with a specific type.

    like

    List list = new ArrayList() { }; // create a specific sub-class
    final Class listClass = list.getClass();
    final ParameterizedType genericSuperclass = (ParameterizedType) listClass.getGenericSuperclass();
    Class elementType = (Class) genericSuperclass.getActualTypeArguments()[0];
    

    This has the dis-advantage that you could end up creating lots of anonymous classes and potential confusion with things like ArrayList.class != list.getClass() however list instanceof ArrayList

提交回复
热议问题