美文网首页
通过反射给没有 setter 方法的属性赋值,包括父类属性

通过反射给没有 setter 方法的属性赋值,包括父类属性

作者: kk爱自由 | 来源:发表于2022-05-06 15:52 被阅读0次

需求

在 Junit 中,有时需要为子类继承自父类的属性赋值,但是父类中的属性没有提供 setter 方法,此时可以使用反射

  • 假设类之间有如下继承关系
    • 父类-RequestBase
      • 子类-SearchRequest
  • 其中父类中 filter 字段未提供 setter 方法,但是在 Junit 中需要为 filter 字段设置值以验证某些场景

实现

SearchRequest request = null;
Class<SearchRequest> clazz = SearchRequest.class;
request = clazz.newInstance();
// 获取父类 class 对象
Class<? super SearchRequest> superclass = clazz.getSuperclass();

List<Filter> filterList = new ArrayList();
Filter filter = new BuyerFilter();
filter.setPattern("*");
filter.setType("java.lang.String");
filter.setSearchFieldName("name");
filterList.add(filter);
// 反射获取父类字段并赋值给子类对象
Field buyFilter = superclass.getDeclaredField("filter");
buyFilter.setAccessible(true);
buyFilter.set(request, buyerFilterList);
// 子类字段直接赋值
request.setLocale("en_US");

相关文章

  • 通过反射给没有 setter 方法的属性赋值,包括父类属性

    需求 在 Junit 中,有时需要为子类继承自父类的属性赋值,但是父类中的属性没有提供 setter 方法,此时可...

  • DI(依赖注入)

    DI(依赖注入):给属性赋值 提供了(XML)两种方法给属性赋值:1、setter 2、构造方法 一、setter...

  • 反射与简单Java类

    传统属性赋值弊端   简单Java类主要是由属性组成,并且提供有相应的setter、getter处理方法,同时简单...

  • Python @property 详解

    类方法转为只读属性 重新实现属性的setter, getter, deleter方法 类方法转为只读属性 pro...

  • Swift 计算属性和存储属性

    计算属性,仅用于存储值 存储属性,用于计算,可以理解为该属性的值通过 getter 获取,通过 setter 赋值...

  • 高级三.封装私有属性

       1. 私有属性添加getter和setter方法  2.@property成为属性函数,可以对属性赋值时做...

  • Spring的继承

    实现Spring的内部继承有两种方法: 1、在父类中进行赋值,子类通过parent属性继承父类的内容 2、因为Ja...

  • OC对象内存布局

    Q: 属性、变量、变量的值、类方法、对象方法怎么布局?元类、类对象、实例对象、根类之间的关系? A: 属性(包括父...

  • JS继承

    1:原型继承 为了让子类继承父类的属性(也包括方法),首先需要定义一个构造函数。然后,将父类的新实例赋值给构造函数...

  • iOS KVC的理解与crash场景

    实现原理:KVC的赋值本质上只是调用了属性的setter方法,setter方法会按照setKey、_setKey、...

网友评论

      本文标题:通过反射给没有 setter 方法的属性赋值,包括父类属性

      本文链接:https://www.haomeiwen.com/subject/cyhzyrtx.html