我有一个Java类,比如

class Test {

   private String field1;
}

没有其他方法或getter和setter.

在一个很棒的脚本中,我有:

def test = new Test()

test.field1 = "foobar"

即使该字段是私有的并且没有定义getter/setter,这也是有效的.它是如何工作的?

该项目是一个Java项目,并且groovy脚本通过GroovyShell执行,因此Test类是由Java编译的(groovy没有添加任何方法).

谢谢你的帮助.

推荐答案

Groovy使用Reflection API来访问字段,所以这里没有真正的"隐私".看看这个question,人们对它的讨论更详细.也判断一下这个article.

Java相关问答推荐

获取拦截器内部的IP地址

为什么我的画布没有显示在PFA应用程序中?

尽管类型擦除,instanceof与泛型在Java中如何工作?

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

给定Java枚举类,通过值查找枚举

内存中的H2修剪尾随空格

从Spring5迁移到Spring6:无法在雅加达包中找到类

放气总是压缩整个街区吗?

GSON期间的Java类型擦除

Com.google.firebase.database.DatabaseException:无法将类型为java.lang.Boolean的值转换为字符串.这是关于什么的?

如何解释Java中for-each循环中对Iterable的强制转换方法引用?

如何在Java记录中设置BigDecimal类型属性的精度?

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

如何以编程方式保存workBench.xmi?

无法使用Java PreparedStatement在SQLite中的日期之间获取结果

将双倍转换为百分比

在具有Quarkus Panache的PostgreSQL中将JSON数据存储为JSONB时,会将其存储为转义字符串

具有多个分析模式的复杂分隔字符串的正则表达式

MapStruct记录到记录的映射不起作用

如何调查进程列表中不可见的活跃 MySQL 事务?