`

java反射强制赋值

    博客分类:
  • java
 
阅读更多
package com.my.reflect;

import java.lang.reflect.Field;

/**
* 反射赋值
* @author mengyao
*
*/
public class ReflectSet {

/**
     * 用于对类的字段赋值,无视private,project修饰符,无视set/get方法
     * @param c 要反射的类
     * @param args 类的字段名和值 每个字段名和值用英文逗号隔开
     * @return
     */
    public static Object getInstance(Class<?> caz, String... args) {
        try {
        //装载指定类后创建类对象
            Object object = Class.forName(caz.getName()).newInstance();
            //通过实例对象取得用取得在内存中该实际类型class对象的引用    
            Class<?> obj = object.getClass();
            Field[] fields = obj.getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                fields[i].setAccessible(true);
                for (int j = 0; j < args.length; j++) {
                    String str = args[j];
                    String strs[] = str.split(",");
                    if (strs[0].equals(fields[i].getName())) {
                        fields[i].set(object, strs[1]);
                        break;
                    }
                }
            }
            return object;
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        }
        return null;
    }
   
   
    public static void main(String[] args) {
        Object object=getInstance(SendInfo.class,"destID,01201101","mobile,15810022404","content,测试数据。");
        SendInfo sms=(SendInfo)object;
        System.out.println("短信内容:"+sms.getContent());
        System.out.println("手机号码:"+sms.getMobile());
        System.out.println("尾号:"+sms.getDestID());
        //String.class==new String().getClass()结果为true,
        //String.class是通过类名的引用取得在内存中该类型class对象的引用;new String().getClass()是通过实例对象取得用取得在内存中该实际类型class对象的引用
        System.out.println(String.class==new String().getClass());
    }

}
class SendInfo {

private String destID;
private String mobile;
private String content;

public SendInfo() {

}

public SendInfo(String destID, String mobile, String content) {
this.destID = destID;
this.mobile = mobile;
this.content = content;
}

public String getDestID() {
return destID;
}
public void setDestID(String destID) {
this.destID = destID;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}

}
分享到:
评论

相关推荐

    Java开发技术大全(500个源代码).

    代码范例列表 第1章 示例描述:本章演示如何开始使用JDK进行程序的开发。 HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用... demoForceChange.java 演示强制类型转换 demoGeneric.java ...

    JAVA知识点总结(XMIND格式)

    11. **反射**:Java反射机制允许在运行时检查类的信息,如类名、属性、方法等,并能动态调用方法和修改属性。 12. **泛型**:泛型引入了类型参数,增强了代码的类型安全性,避免了强制类型转换,提高了代码的可读性...

    反射泛型

    对于泛型字段,反射同样可以帮助我们确保赋值类型的安全性。 4. **处理泛型接口**:当实现一个带有泛型的接口时,反射可以帮助我们检查实现类是否正确地遵循了接口的泛型约束。 5. **反射与反射代理**:Java的`...

    Java基础案例教程(第2版)_PPT.zip

    16. **反射机制**:反射允许在运行时动态访问和修改类的信息,是Java的高级特性,常用于插件开发、元编程等场景。 17. **泛型**:泛型引入后,可以在编译时检查类型安全,减少强制类型转换,提升代码的可读性和可...

    第16天(基础加强_反射)1

    - 通过反射强制创建Class对象 - 初始化子类 - 直接运行主类 4. 获取Class对象的三种方式 - 通过类型获取:`类名.class` - 通过实例对象获取:`对象.getClass()` - 通过字符串获取:`Class.forName("全限定类名")` ...

    Java培训之基础篇 Java培训之基础篇

    通过深入学习以上内容,初学者将能够构建坚实的基础,进一步探索更复杂的Java编程概念,如接口、集合框架、异常处理、IO流、多线程、网络编程、反射和注解等。不断实践和学习,是成为熟练Java开发者的必经之路。

    java八股文共10章八股文.rar

    - 变量的声明与赋值:掌握不同类型的变量声明、初始化和作用域规则。 - 数据类型转换:理解自动类型转换和强制类型转换的区别和注意事项。 3. **控制结构** - 分支结构:if-else、switch-case的使用及其逻辑处理...

    java全集.pdf JAVA全集

    - **强制类型转换**:显式地将一个数据类型的值转换为另一种数据类型。 **4.4 控制流** - **条件语句**:`if`, `else if`, `else`。 - **循环语句**:`for`, `while`, `do...while`。 - **跳转语句**:`break`, `...

    java100例 提供适宜练习的小程序

    1. **基础语法**:Java的基础语法包括变量声明、数据类型(如int、double、char、boolean等)、运算符(如算术、比较、逻辑、赋值等)、流程控制(如if语句、switch语句、for循环、while循环)以及方法定义。...

    Java面经-百度准入职老哥整理.pdf

    8. **Java反射** - 反射是Java的一种强大特性,允许程序在运行时检查类的信息,如类名、方法、字段等,并能动态调用方法和访问字段,增强了程序的灵活性。 以上只是这份资料的部分内容概述,实际的学习过程中,...

    Java基础知识面试题(2020最新版).pdf

    浮点数赋值给short类型的变量需要强制类型转换,而使用s1 += 1这种复合赋值操作会自动处理类型转换。Java语言采用Unicode编码方案,保证了对多种字符的支持。 访问修饰符public、private、protected和默认(包级...

    疯狂Java操练

    `表示声明了一个整型变量`num`并赋值为10。 2. **流程控制**: - **条件语句**:使用`if-else`结构来实现不同逻辑路径的选择,例如: ```java if (score &gt;= 60) { System.out.println("及格"); } else { ...

    Java中文参考手册 官方出版.zip_Java 2 Platform_Java中文参考手册_Java中文手册_java参考手册

    Java中文参考手册包含了这些特性和更多API的详细说明,涵盖了类库、异常、多线程、网络编程、I/O、反射、安全管理等多个方面。对于开发者来说,这份手册是理解和掌握Java 5及更高版本的关键资源。通过查阅此手册,你...

    java基础课件学习

    变量声明、数据类型(如整型int、浮点型float、字符型char等)和运算符(如赋值、比较、逻辑等)都是Java语法的基础。 2. **类和对象**:Java是一种面向对象的语言,这意味着它的核心是类和对象。类是数据和操作...

    疯狂JAVA讲义

    第1章 Java概述 1 1.1 Java语言的发展简史 2 1.2 Java的竞争对手及各自优势 4 1.2.1 C#简介和优势 4 1.2.2 Ruby简介和优势 4 1.2.3 Python的简介和优势 5 1.3 Java程序运行机制 5 1.3.1 高级语言的运行机制 6...

    CoreJava学习笔记

    Java支持多种操作符,包括算术操作符、赋值操作符、比较操作符、逻辑操作符等。 **数字类型之间的转换:** Java中不同数字类型之间的转换可以通过自动类型提升或显式的强制类型转换来实现。 **强制类型转换:** ...

    Java基础入门教程 第9章 Java的高级特性(共32页).ppt

    例如,`List&lt;Test&gt;`限制了列表只能存储`Test`类型的对象,而不需要在取出元素时进行强制类型转换。泛型的使用需要注意以下几点: - 类型参数只能是引用类型,不能是基本类型。 - 同一泛型可以有多个不同的类型参数...

    Java新手入门的30个基本概念 .txt

    反射是Java的一个高级特性,允许程序在运行时检查和修改自身结构,包括获取类的信息、创建对象、调用方法等,为程序提供了极大的灵活性和扩展性。 #### 20. 接口(Interface) 接口定义了一组行为规范,它只包含...

    CoreJava(java入门教程总结)

    - **类型转换**:自动类型提升与显式强制类型转换。 - **控制流**:if-else、switch-case、for、while等循环结构。 - **循环语句**:for循环、while循环、do-while循环及其应用。 #### 7. 数组 - **声明**:使用...

    java jdk1.8文档.zip

    Java JDK 1.8文档是Java开发者不可或缺的重要参考资料,它包含了Java Development Kit 8版本的所有API规范、...同时,文档还涵盖了基础类库、网络编程、I/O、反射、安全等多个方面的内容,是Java开发者必备的学习资料。

Global site tag (gtag.js) - Google Analytics