Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在运行时通过Jython向Java类的实例添加属性_Java_Jython_Monkeypatching - Fatal编程技术网

如何在运行时通过Jython向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

我正在使用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.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类和现有对象,并在稍后的代码中使用这些新对象

然而,我不确定如何做到这一点,或者是否有其他选择

想法