单级属性赋值 | 带你学《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面向对象编程文章查看此处

相关文章
|
1月前
|
数据采集 分布式计算 大数据
Java语言在大数据处理中的应用
传统的大数据处理往往依赖于庞大的数据中心和高性能的服务器,然而随着大数据时代的到来,Java作为一种强大的编程语言正在被广泛应用于大数据处理领域。本文将探讨Java语言在大数据处理中的优势和应用,以及其在分布式计算、数据处理和系统集成等方面的重要作用。
|
1天前
|
安全 Java 大数据
探索Java的奇妙世界:语言特性与实际应用
探索Java的奇妙世界:语言特性与实际应用
|
2天前
|
SQL Java 数据库连接
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
Java从入门到精通:2.3.2数据库编程——了解SQL语言,编写基本查询语句
|
8天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
8天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
148 10
|
13天前
|
Java Android开发 C++
Kotlin vs Java:选择最佳语言进行安卓开发
【4月更文挑战第13天】Java曾是安卓开发的主流语言,但Kotlin的崛起改变了这一局面。Google在2017年支持Kotlin,引发两者优劣讨论。Java以其成熟稳定、强大生态和跨平台能力占优,但代码冗长、开发效率低和语言特性过时是短板。Kotlin则以简洁语法、空安全设计和高度兼容Java脱颖而出,但社区和生态系统仍在发展中,可能存在学习曲线和性能问题。选择语言应考虑项目需求、团队熟悉度、维护性、性能和生态系统。无论选择哪种,理解其差异并适应新技术至关重要。
|
24天前
|
Java
Java语言打印九九乘法表(详解)
Java语言打印九九乘法表(详解)
15 1
Java语言打印九九乘法表(详解)
|
3天前
|
安全 Java 调度
Java线程:深入理解与实战应用
Java线程:深入理解与实战应用
21 0
|
1天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度