从Java中未知的Groovy类访问字段

从Java中未知的Groovy类访问字段,java,gradle,groovy,Java,Gradle,Groovy,我有一个Groovy类: class SomeGroovyThing { String name } 在Java中,我收到一个对此类实例的引用作为对象: Object o = project.getExtensions().getByName("groovyThing") 我无法强制转换该对象,因为我没有访问Java中Groovy类的权限(出于不相关的原因)。如何检索name属性的值(即,我想执行o.name但显然不起作用) 我想做一些反射,但我的对象是Groovy类这一事实给事情带

我有一个Groovy类:

class SomeGroovyThing {
    String name
}
在Java中,我收到一个对此类实例的引用作为对象:

Object o = project.getExtensions().getByName("groovyThing")
我无法强制转换该对象,因为我没有访问Java中Groovy类的权限(出于不相关的原因)。如何检索
name
属性的值(即,我想执行
o.name
但显然不起作用)


我想做一些反射,但我的对象是Groovy类这一事实给事情带来了麻烦。

你可以使用反射来做这件事

你可以得到它:

String name=(String)o.getClass().getField("name").get(o);
或者设置它:

o.getClass().getField("name").set(o,name);

如果
name
private
,您可以使用setter/getter方法(
Class
中的
getMethod()
)设置或获取它,或者在
字段上使用
setAccessible(true)
如果
getByName
返回
SomeGroovyThing
的对象,那么为什么您认为不能强制转换它呢。此外,铸造不需要源代码。只有你需要让类在你的类路径上可用。它不在我的类路径中。这就是我的意思。groovy类生活在一个完全独立的repo中,由于其他原因,它不能用作依赖项。所谓类,我指的是已编译的类(或者可能是jar),并且该类/jar必须位于您的类路径上。是的,我知道,我更希望有一种方法可以做到这一点,而不必将其放在我的类路径上(长话短说,为什么……这里不会解释)。也就是说,一个解决方案使用了类似于反射的东西,但是可以与Groovy的类一起工作。