如何在运行时通过Jython将属性添加到Java类的实例

时间:2016-04-22 08:55:02

标签: java jython monkeypatching

我使用的是Jython 2.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.var1 = a;
  }
}

在我的Jython脚本中,我可以访问A类的实例(对象)并且可以执行

var1 = myinstance.getVar1()

以获取属性var1

我的问题如下:我想在运行时向ClassA的所有实例添加另一个属性,即'var2'字段。

这应该存在于ClassA的所有实例上,但对于每个类的实例都有不同的实际值(绑定到对象,而不是类)。

如果成功,我还想动态地为这些对象添加getVar2()方法,以获取self.var2中为每个对象存储的内容。

问题是:据我所知,如果ClassA是python,这本来是可能的。但是因为它是一个java类,所以jython不允许这样做[即使设置python.security.respectJavaAccessibility = false]

我在一本jython书中发现的一个想法如下:

  

添加属性:您无法在Java实例中添加属性   运行时带有赋值语句。要获得这种能力,你可以   创建Java对象的Jython子类。然后你就可以了   将属性添加到子类的实例。

因此,应该可以使用具有附加属性的python类包装java类和现有对象,并在我的代码中稍后使用这些新对象。

但是我不确定如何做到这一点或是否有替代方案。

思想?

0 个答案:

没有答案