如何在运行时通过Jython向Java类的实例添加属性
我正在使用Jython2.5(但如果需要,可以更改为2.7)。 除此之外,我的jython代码处理导入的jar库的java类的实例 假设java库代码是如何在运行时通过Jython向Java类的实例添加属性,java,jython,monkeypatching,Java,Jython,Monkeypatching,我正在使用Jython2.5(但如果需要,可以更改为2.7)。 除此之外,我的jython代码处理导入的jar库的java类的实例 假设java库代码是 public class A extends B implements C { public A(int a) { this.var1 = a; } public getVar1() { return this.var1; } public setVar1(a) { this.var
public class A extends B implements C
{
public A(int a)
{
this.var1 = a;
}
public getVar1()
{
return this.var1;
}
public setVar1(a)
{
this.var1 = a;
}
}
在我的Jython脚本中,我可以访问类的实例(对象),并且可以执行以下操作
var1 = myinstance.getVar1()
为了获得属性var1
我的问题如下:我想在运行时向ClassA的所有实例添加另一个属性,即“var2”字段
这应该存在于ClassA的所有实例上,但对于类的每个实例都有不同的实际值(绑定到对象,而不是类)
如果成功,我还想动态地向这些对象添加一个getVar2()
方法,为每个对象获取存储在self.var2
中的内容
问题是:据我所知,如果ClassA是python,这是可能的。但由于它是一个java类,jython不允许这样做[即使在设置python.security.reserveJavaAccessibility=false
]
我在jython的书中发现的一个想法如下:
添加属性:您不能同时向Java实例添加属性
具有赋值语句的运行时。要获得此能力,您可以
创建Java对象的Jython子类。然后你就可以
向子类的实例添加属性
因此,应该可以使用具有附加属性的python类包装java类和现有对象,并在稍后的代码中使用这些新对象
然而,我不确定如何做到这一点,或者是否有其他选择
想法