单级属性赋值 | 带你学《Java语言高级特性》之九十一

简介: 本节需要掌握需要通过反射进行指定类对象的实例化处理,进行内容的设置(Field属性类型、方法名称、要设置的内容)。

上一篇:属性自动赋值实现思路 | 带你学《Java语言高级特性》之九十
【本节目标】
本节需要掌握需要通过反射进行指定类对象的实例化处理,进行内容的设置(Field属性类型、方法名称、要设置的内容)。

单级属性配置

对于此时的Emp类中会发现所给出的数据类型都没有其他的引用关联了,只是描述了Empty本类的对象,所以这样的设置称为单级设置处理,所以此时应该处理两件事情:

  • 需要通过反射进行指定类对象的实例化处理;
  • 进行内容的设置(Field属性类型、方法名称、要设置的内容);

image.png
反射与简单Java类

1、定义StringUtils实现首字母大写功能

class StringUtils {
    public static String initcap(String str) {
        if (str == null || "".equals(str)) {
            return str;
        }
        if (str.length() == 1) {
            return str.toUpperCase();
        }else {
        return str.substring(0, 1).toUpperCase() + str.substring(1);
        }
    }
}

2、定义BeanUtils工具类,该工具类主要实现属性的设置。

class BeanUtils{   //进行Bean处理的类
    private BeanUtils(){}
    /**
     * 实现指定对象的属性设置
     * @param obj 要进行反射操作的实例化对象
     * @param value 包含有指定内容的字符串,格式"属性:内容|属性:内容"
     */
    public static void setValue(Object obj,String value){
        String results [] = value.split("\\|");//按照"|"进行每一组属性的拆分
        for (int x = 0; x < results.length; x ++) {   //循环设置属性内容
            //attval [0]保存的是属性名称,attval [1]保存的是属性内容
            String attval [] = results[x].split(":");   //获取“属性名称”和内容
            try {
                Field field = obj.getClass().getDeclaredField(attval[0]);  //获取成员
                Method setMethod = obj.getClass().getDeclaredMethod("set" + StringUtils.initcap(attval [0]), field.getType());
                setMethod.invoke(obj, attval [1]);  //调用setter方法设置内容
            }catch (Exception e) {}
        }
    }
}

3、ClassInstanceFactory负责实例化对象并且调用BeanUtils类实现属性内容的设置。

class ClassInstanceFactory{
    private ClassInstanceFactory(){}

    /**
     * 实例化对象的创建方法,该对象可以根据传入的字符串结构:"属性:内容|属性:内容"
     * @param clazz 要进行反射实例化的Class对象,有Class就可以反射实例化对象
     * @param value 要设置给对象的属性内容
     * @return 一个已经配置好属性内容的Java对象
     */
    public static <T> T create(Class<?> clazz,String value){
        // 如果要想采用反射进行简单Java类对象属性设置的时候,类中必须要有无参构造
        try {
            Object obj = clazz.getDeclaredConstructor().newInstance();
            BeanUtils.setValue();   //通过反射设置属性
            return (T) obj; //返回对象
        }catch (Exception e) {
            e.printStackTrace();  //如果此时真的出现了错误,本质上抛出异常也没用
            return null;
        }    
    }
}

即使类中的属性再多,那么也可以轻松的实现setter的调用(类对象实例化处理)。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:设置多种数据类型 | 带你学《Java语言高级特性》之九十二
更多Java面向对象编程文章查看此处

相关文章
|
2天前
|
Java 调度
【Java多线程】线程中几个常见的属性以及状态
【Java多线程】线程中几个常见的属性以及状态
8 0
|
4天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
46 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
4天前
|
网络协议 Java 数据库连接
Java语言的特点
【5月更文挑战第7天】Java是一种面向对象的编程语言,强调数据和操作的封装,具备平台独立性,能“一次编写,到处运行”。它有自动垃圾收集机制,消除手动内存管理。Java是强类型语言,注重安全性,并支持多线程编程。其丰富的API库和对网络编程的良好支持增强了功能。此外,Java的可扩展性使其能轻松适应新需求和扩展。
17 4
|
4天前
|
分布式计算 Java 大数据
Java语言主要应用领域
【5月更文挑战第7天】Java在嵌入式系统中以低至130KB的占用展现可靠性,实现“一次编写,到处运行”。在大数据领域,Java通过Hadoop、Hbase、Accumulo和ElasticSearch等工具发挥关键作用。Java也是Eclipse、IntelliJ IDEA和NetBeans等开发工具的基础。广泛应用于电商网站和金融服务器系统,即便在J2ME式微后,仍能在部分低端手机中找到其踪影。
16 4
|
9天前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
12 2
|
13天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承
|
13天前
|
存储 Java
Java语言--->数据类型转化以及运算符
本文讲述了Java中的基本数据类型转换和运算符。在转换中,布尔型除外的8种类型可通过默认或强制转换相互转化,如`byte-&gt;short-&gt;int-&gt;long-&gt;float-&gt;double`。默认转换发生在不同类型运算时,系统会转为更大容量类型。强制转换可能引起精度损失或溢出。运算符包括算术(如+可做加法或字符串拼接)、比较、逻辑和赋值运算符。比较运算符如`==`、`&lt;`等产生`boolean`结果,逻辑运算符`&&`、`||`具有短路效应。赋值运算符如`+=`简化了赋值过程。运算符的优先级也进行了简要说明。
|
13天前
|
Java 编译器 程序员
Java语言基础
Java语言基础概览:涵盖关键字(全小写,如`image.png`所示),保留字(如`goto`、`const`),标识符命名规则(避免数字开头和保留字),注释(单行`//`,多行`/*...*/`,及Javadoc注释)以及变量(按数据类型:byte, short, int, long, float, double, char, boolean,注意声明规则和默认类型)。
《21天学通Java(第6版)》—— 1.4 属性和行为
这两者在VolcanoRobot中都有,这是今天将作为类实现的项目。该项目使用计算机模拟火山探测工具,它模仿的是NASA的“遥控机器人研究”计划中用来在火山裂缝中进行研究探测的Dante II机器人。
1807 0
|
存储 机器人 Java
《21天学通Java(第7版)》—— 1.4 属性和行为
Java类包含两种不同的信息:属性和行为。 这两者在MarsRobot中都有,这是今天将作为类实现的项目。该项目使用计算机模拟行星探测工具,灵感来自NASA喷气推进实验室(Jet Propulsion Laboratory)用来探测火星表面地质情况的火星探测车(Mars Exploration Rovers)。
1714 0