Java 泛型-获取引用类型
我无法获取列表的类型。问题是在声明时我没有指定类型。我只在运行时设置它 我有一节POJO课Java 泛型-获取引用类型,java,generics,reflection,arraylist,Java,Generics,Reflection,Arraylist,我无法获取列表的类型。问题是在声明时我没有指定类型。我只在运行时设置它 我有一节POJO课 public class MyObject<T> { private String name; private List<T> list; //getter and setter } 如果在运行时设置,如何获取类型?该方法具有返回类型,其中可以是Class或parameteredType。对我来说,如果在没有参数化类型的字段上调用,它就不会返回参数化类型。在这
public class MyObject<T> {
private String name;
private List<T> list;
//getter and setter
}
如果在运行时设置,如何获取类型?该方法具有返回类型,其中可以是Class
或parameteredType
。对我来说,如果在没有参数化类型的字段上调用,它就不会返回参数化类型
。在这种情况下,它似乎返回Class
。在这一点上,这个问题没有定论
至于您关于如何在运行时获取实际类型的问题:泛型类型信息在运行时被擦除。它仅用于确保编译时的类型安全。将实际类型为ArrayList
的对象分配给静态类型为List
的变量时,在运行时无法获取实际对象的泛型类型。您可以做的是检查列表中包含的对象的类型:
Class<?> foo = list.get(0).getClass();
Class foo=list.get(0.getClass();
该方法具有返回类型,其中可以是类
或参数化类型
。对我来说,如果在没有参数化类型的字段上调用,它就不会返回参数化类型
。在这种情况下,它似乎返回Class
。在这一点上,这个问题没有定论
至于您关于如何在运行时获取实际类型的问题:泛型类型信息在运行时被擦除。它仅用于确保编译时的类型安全。将实际类型为ArrayList
的对象分配给静态类型为List
的变量时,在运行时无法获取实际对象的泛型类型。您可以做的是检查列表中包含的对象的类型:
Class<?> foo = list.get(0).getClass();
Class foo=list.get(0.getClass();
该方法具有返回类型,其中可以是类
或参数化类型
。对我来说,如果在没有参数化类型的字段上调用,它就不会返回参数化类型
。在这种情况下,它似乎返回Class
。在这一点上,这个问题没有定论
至于您关于如何在运行时获取实际类型的问题:泛型类型信息在运行时被擦除。它仅用于确保编译时的类型安全。将实际类型为ArrayList
的对象分配给静态类型为List
的变量时,在运行时无法获取实际对象的泛型类型。您可以做的是检查列表中包含的对象的类型:
Class<?> foo = list.get(0).getClass();
Class foo=list.get(0.getClass();
该方法具有返回类型,其中可以是类
或参数化类型
。对我来说,如果在没有参数化类型的字段上调用,它就不会返回参数化类型
。在这种情况下,它似乎返回Class
。在这一点上,这个问题没有定论
至于您关于如何在运行时获取实际类型的问题:泛型类型信息在运行时被擦除。它仅用于确保编译时的类型安全。将实际类型为ArrayList
的对象分配给静态类型为List
的变量时,在运行时无法获取实际对象的泛型类型。您可以做的是检查列表中包含的对象的类型:
Class<?> foo = list.get(0).getClass();
Class foo=list.get(0.getClass();
我认为你想要实现的目标是不可能的。但是,对代码稍作修改就可以做到:
public class MyObject {
private List<?> list;
private Class<?> type;
public <T> void setList(List<T> list, Class<T> c) {
this.list = list;
this.type = c;
}
public List<?> getList() {
return list;
}
public Class<?> getType() {
return type;
}
}
我认为你想要达到的目标是不可能的。但是,对代码稍作修改就可以做到:
public class MyObject {
private List<?> list;
private Class<?> type;
public <T> void setList(List<T> list, Class<T> c) {
this.list = list;
this.type = c;
}
public List<?> getList() {
return list;
}
public Class<?> getType() {
return type;
}
}
我认为你想要达到的目标是不可能的。但是,对代码稍作修改就可以做到:
public class MyObject {
private List<?> list;
private Class<?> type;
public <T> void setList(List<T> list, Class<T> c) {
this.list = list;
this.type = c;
}
public List<?> getList() {
return list;
}
public Class<?> getType() {
return type;
}
}
我认为你想要达到的目标是不可能的。但是,对代码稍作修改就可以做到:
public class MyObject {
private List<?> list;
private Class<?> type;
public <T> void setList(List<T> list, Class<T> c) {
this.list = list;
this.type = c;
}
public List<?> getList() {
return list;
}
public Class<?> getType() {
return type;
}
}
但是如果在运行时设置,如何获取类型?列表在运行时()没有类型,所以这个问题没有真正意义。最好告诉我们您实际要做什么。但是如果我在运行时设置,如何获取类型呢?列表在运行时()没有类型,所以这个问题没有真正意义。最好告诉我们您实际要做什么。但是如果我在运行时设置,如何获取类型呢?列表在运行时()没有类型,所以这个问题没有真正意义。最好告诉我们您实际要做什么。但是如果我在运行时设置,如何获取类型呢?列表在运行时()没有类型,所以这个问题没有真正意义。最好告诉我们您实际想要做什么。这是一个很好的解决方法,但当列表中没有任何元素时,它将不起作用……是的,如果列表为空怎么办?@NielsBillen是的,在这种情况下它将不起作用;-)我喜欢你的答案,我曾经做过类似的事情。嗨,我已经编辑了代码。请查收。现在,我该如何获取类型?这是一个很好的解决方法,但当列表中没有任何元素时,它将不起作用……是的,如果列表为空怎么办?@NielsBillen是的,在这种情况下它将不起作用;-)我喜欢你的答案,我曾经做过类似的事情。嗨,我已经编辑了代码。请查收。现在,我该如何获取类型?这是一个很好的解决方法,但当列表中没有任何元素时,它将不起作用……是的,如果列表为空怎么办?@NielsBillen是的,在这种情况下它将不起作用;-)我喜欢你的答案,我曾经做过类似的事情。嗨,我已经编辑了代码。请查收。现在,我该如何获取类型?这是一个很好的解决方法,但当列表中没有任何元素时,它将不起作用……是的,如果列表为空怎么办?@NielsBillen是的,在这种情况下它将不起作用;-)我喜欢你的回答,我曾经做过类似的事情。嗨,我