News:三分天注定,七分靠打拼,爱拼才会赢!致力打造专业IT博客。如果你对本博客有任何意见或建议请联系作者,邮箱:blog@caokuan.cn

反射获取实体中某个泛型字段的实际类型

逝水无痕 481 0 条

有时候我们在写一些工具类或者框架的底层方法时需要知道某个实体里的泛型字段的实际类型,然后做一些处理。在如何获取这个实际类型时会犯一些难,下面将贴出一段代码来示意如何获取这个实际类型,希望读者能不拘泥于这种形式,可以举一反三。

java反射.jpg

实体类

public class User {

    private String name;
    
    private Integer age;
    
    private Set<User> subUsers;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Set<User> getSubUsers() {
        return subUsers;
    }

    public void setSubUsers(Set<User> subUsers) {
        this.subUsers = subUsers;
    }
}

反射获取 subUsers 的实际泛型类型

public static void main(String[] args) throws Exception {
    // 反射获取实体中某个集合字段的泛型类型
    // 例:获取User中的 subUsers 的实际类型
    Field field = User.class.getDeclaredField("subUsers");
    Type type = field.getGenericType();
    Class<?> fieldClass = (Class<?>) ((ParameterizedType) type).getActualTypeArguments()[0];
    // 打印实际类型:class cn.caokuan.test.User
    System.out.println(fieldClass);
    
    // 创建对象并设置集合的值
    User user = new User();
    Set subUsers = new HashSet();
    subUsers.add(fieldClass.newInstance());
    user.setSubUsers(subUsers);
    // 打印user对象中的subUsers的size为:1
    System.out.println(user.getSubUsers().size());
}
发表我的评论
icon_mrgreen.gificon_neutral.gificon_twisted.gificon_arrow.gificon_eek.gificon_smile.gificon_confused.gificon_cool.gificon_evil.gificon_biggrin.gificon_idea.gificon_redface.gificon_razz.gificon_rolleyes.gificon_wink.gificon_cry.gificon_surprised.gificon_lol.gificon_mad.gificon_sad.gificon_exclaim.gificon_question.gif

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址