0 0

Java通过反射可以设置私有变量的好处有哪?3

public class PrivateTest {   
    private String name = "hello";   
  
    public String getName() {   
        return name;   
    }   
}  

public class ReflectionTest {   
    public static void main(String[] args) throws Exception {   
        PrivateTest pt = new PrivateTest();   
           
        Class<PrivateTest> clazz = PrivateTest.class;   
           
        Field field = clazz.getDeclaredField("name");   
        field.setAccessible(true);   
        field.set(pt, "world");   
        field.setAccessible(false);   
           
        System.out.println(pt.getName());   
    }   
}  


这样通过反射可以设置私有变量,Java当时设计的时候是出于什么考虑的呢?

问题补充:
robertliudeqiang 写道
提供了一种接口吧,一般情况下不会用的。

但是也有应用的场景,可以想到的是: hibernate中你定义实体类及相应的字段(和数据库表对应),你可以在映射文件中配置: 当你从数据库中获取到数据后,是调用类的setxxx()方法,还是直接给字段赋值,这里字段是可以设置成private的,用的就是反射。


那java反射可以设置私有变量的值,是好处多还是坏处多呢?

问题补充:
robertliudeqiang 写道
提供了一种接口吧,一般情况下不会用的。

但是也有应用的场景,可以想到的是: hibernate中你定义实体类及相应的字段(和数据库表对应),你可以在映射文件中配置: 当你从数据库中获取到数据后,是调用类的setxxx()方法,还是直接给字段赋值,这里字段是可以设置成private的,用的就是反射。


目前反射设置private变量的值,还未看出是有好处 的。

那应该是java的一个问题遗留,为了兼容没法解决的。
不过有点说不过去,为了兼容,也BUG也遗留?

2010年3月24日 10:33

4个答案 按时间排序 按投票排序

0 0

引用
为了兼容,也BUG也遗留?


也许sun认为这不是一个问题,也懒得管。

2010年3月24日 20:37
0 0

引用
那java反射可以设置私有变量的值,是好处多还是坏处多呢?


这就难说了,反射不止可以设置私有变量,也可以改变final变量,这些都是对一些现有规则的破坏,其实是不太好的。但为什么反射一直可以这样做,个人觉得主要还是遗留问题吧,因为反射出来比较早,后续版本要保持兼容,这个特性就一直在。

虽然不好,不过这个特性很多框架都用过,比如我刚才的hibernate,还有一些,想不起来了,可以当成一项特殊功能,特殊情况下用用不没关系啊。

2010年3月24日 10:57
0 0

提供了一种接口吧,一般情况下不会用的。

但是也有应用的场景,可以想到的是: hibernate中你定义实体类及相应的字段(和数据库表对应),你可以在映射文件中配置: 当你从数据库中获取到数据后,是调用类的setxxx()方法,还是直接给字段赋值,这里字段是可以设置成private的,用的就是反射。

2010年3月24日 10:46
0 0

java最初的设计是没有包含反射这个特性的,

这也是后来为了能在java运行期间得到类字节码的元数据,

其实当你用反射的时候就已经破坏了java的封装了,跳出正常的语言规范

2010年3月24日 10:37

相关推荐

    反射修改私有成员变量例子

    Java 反射机制修改私有成员变量实例 Java 反射机制是 Java 语言中一个强大的工具,它允许程序在运行时检查和修改类的结构和行为。在本例中,我们将使用 Java 反射机制来修改私有成员变量的值。 什么是 Java 反射...

    Java反射访问私有变量和私有方法.doc

    Java 反射访问私有变量和私有方法 Java 反射机制是 Java 语言中的一种强大的工具,使得我们可以在运行时装配代码,而无需在对象之间进行源代码链接,从而使代码更具灵活性。在实际测试中,我们经常需要访问类的非...

    Java反射机制修改私有成员变量的实现_Reflection

    在提供的"reflectionNew"文件中,可能包含了一些关于如何实现上述过程的示例代码或进一步的解释,如果需要深入学习,可以详细查看这个文件内容,以便更好地理解和掌握Java反射机制修改私有成员变量的方法。

    java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class

    提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/...

    java 利用反射获取内部类静态成员变量的值操作.docx

    接下来,我们将通过一个具体的例子来演示如何使用Java反射获取内部类的静态成员变量的值。 ##### 示例代码分析 假设我们有如下的类结构: ```java public class Goods { static class Apple { // 内部类 public ...

    Java对类私有变量的暴力反射技术讲解

    "Java对类私有变量的暴力反射技术讲解" Java对类私有变量的暴力... Java对类私有变量的暴力反射技术讲解是Java语言中一种非常有用的技术,它可以帮助我们更方便地访问和修改私有变量,从而提高开发效率和代码质量。

    java 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class

    提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实...

    反射高手巧妙实现强行私有成员源代码,java跨域范围

    通过反射,开发者可以访问通常被限制的私有成员,包括私有变量和私有方法,这在特定场景下如测试、调试或框架设计中非常有用。本文将深入探讨如何巧妙地利用反射来实现对私有成员的强制访问,并以`HackUtils.java`...

    JAVA反射机制详解视频

    (通过反射获取私有构造方法并使用) (通过反射获取成员变量并使用) (通过反射获取无参无返回值成员方法并使用) (通过反射获取带参带返回值成员方法并使用) (通过反射运行配置文件内容) (通过反射越过泛型检查) (通过...

    JAVA反射机制的入门代码

    总的来说,"JAVA反射机制的入门代码"是初学者理解Java反射机制的好教材,通过它,你可以学习如何动态地操作Java类,提高代码的灵活性,并掌握处理`properties`文件的基础方法。在深入学习和实践中,你将进一步理解...

    Java常用的反射方法

    3.4 获取私有的变量(利用暴力反射) 4. 反射获取构造方法 4.1有参构造 4.2无参构造 4.3无参构造简便写法 5.反射获取成员方法 5.1无参方法 5.2 有参方法 5.3 获取所有方法(包含Object的方法)

    java反射.pdf

    ### Java反射机制详解 #### 一、什么是Java反射? Java反射是Java编程语言的一个特性,它允许运行时检查和操作程序结构(类、字段、方法等)。反射的主要用途包括但不限于:动态实例化对象、访问私有成员、调用...

    java 反射实例,大量注释,简单易懂

    - 虽然Java反射不直接支持泛型,但可以通过获取方法或构造器的`ParameterizedType`来获取泛型信息。 6. **注释与反射**: - Java反射还可以用于读取类、方法、字段上的注释,这对于元数据驱动的设计尤其有用。 7...

    java 反射机制例子

    ### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至修改自身的状态和行为。这种能力一经提出,迅速成为了计算机科学领域的研究...

    JAVA反射机制

    - **访问私有成员**:反射可以访问类的私有成员,包括私有变量和方法。 - **调用方法**:可以通过反射调用类的方法,即使这些方法是私有的。 - **修改字段值**:可以使用反射来修改类的字段值,无论这些字段是否私有...

    候捷谈Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时获取和操作任何已知名称的类的内部信息。这一机制使得Java具备了一定的动态性,虽然在传统的分类中Java被视为静态类型语言。通过反射,开发者可以在...

    java反射机制知识点

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、对象等的内部信息。这一机制的核心在于Java.lang.reflect包中的三个关键类:Class、Method和Field,它们分别代表类的信息、...

    java反射机制PPT

    Java反射机制是Java编程语言中一项强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。反射机制的核心在于能够在运行时动态地获取类的信息,并且可以动态调用对象的方法,创建对象,甚至修改对象...

Global site tag (gtag.js) - Google Analytics