为了账号安全,请及时绑定邮箱和手机立即绑定

获取java.util.List的泛型类型

获取java.util.List的泛型类型

撒科打诨 2019-06-18 16:30:00
获取java.util.List的泛型类型我有;List<String> stringList = new ArrayList<String>();List<Integer> integerList = new ArrayList<Integer>();是否有一种(容易)的方法来检索列表的泛型类型?
查看完整描述

3 回答

?
莫回无

TA贡献1865条经验 获得超7个赞

如果这些字段实际上是某个类的字段,那么您可以通过一些反射得到它们:

package test;import java.lang.reflect.Field;import java.lang.reflect.ParameterizedType;import java.util.ArrayList;import java.util.List;
public class Test {

    List<String> stringList = new ArrayList<String>();
    List<Integer> integerList = new ArrayList<Integer>();

    public static void main(String... args) throws Exception {
        Field stringListField = Test.class.getDeclaredField("stringList");
        ParameterizedType stringListType = (ParameterizedType) stringListField.getGenericType();
        Class<?> stringListClass = (Class<?>) stringListType.getActualTypeArguments()[0];
        System.out.println(stringListClass); // class java.lang.String.

        Field integerListField = Test.class.getDeclaredField("integerList");
        ParameterizedType integerListType = (ParameterizedType) integerListField.getGenericType();
        Class<?> integerListClass = (Class<?>) integerListType.getActualTypeArguments()[0];
        System.out.println(integerListClass); // class java.lang.Integer.
    }}

对于参数类型和方法的返回类型,也可以这样做。

但是,如果它们在类/方法的相同范围内,您需要了解它们,那么就没有必要知道它们,因为您已经自己声明了它们。


查看完整回答
反对 回复 2019-06-18
?
慕村9548890

TA贡献1884条经验 获得超4个赞

简短回答:不。

这可能是个复制品,现在找不到合适的。

Java使用的是类型擦除,这意味着在运行时这两个对象是等价的。编译器知道列表包含整数或字符串,因此可以维护类型安全环境。此信息(基于对象实例)在运行时丢失,列表仅包含“对象”。

您可以稍微了解一下这个类,它可能被参数化的类型,但是通常这只是扩展“Object”的任何东西,也就是任何东西。如果将类型定义为

class <A extends MyClass> AClass {....}

类将只包含参数A由MyClass限定的事实,但更重要的是,无法判断。


查看完整回答
反对 回复 2019-06-18
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

您也可以对方法参数执行相同的操作:

Type[] types = method.getGenericParameterTypes();
//Now assuming that the first parameter to the method is of type List<Integer>ParameterizedType pType = (ParameterizedType) types[0];
Class<?> clazz = (Class<?>) pType.getActualTypeArguments()[0];System.out.println(clazz); //prints out java.lang.Integer


查看完整回答
反对 回复 2019-06-18
  • 3 回答
  • 0 关注
  • 4934 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信