我有这样的封闭和嵌套类:
public class Promotion {
protected int id;
protected List<Image> images;
//...
public class Image {
private String id;
private String aspect_ration;
public Promotion getPromotion() {
return Promotion.this; //<-- Always null.
}
}
}
这个类的对象是由Gson从json字符串自动创建和初始化的。
由于某种原因(由Gson
实例化),在嵌套类实例中,Promotion.this
为null
。手动设置是不可能的,因为语句Promotion.this = promotion;
会导致编译错误:Variable expected
。
有没有办法做这样的事情:(通过普通的Java方式,或者一些Java反射技巧)
public class Promotion {
//...
public class Image {
public void setPromotion(Promotion promotion) {
Promotion.this = promotion; //<-- Is not possible.
}
}
}
答案 0 :(得分:1)
我通过Reflection
找到了自己的方法。有问题的方法可以这样实现:
public void setPromotion(Promotion promotion) throws IllegalAccessException
{
try {
Field enclosingThisField = Image.class.getDeclaredField("this$0");
enclosingThisField.setAccessible(true);
enclosingThisField.set(this, promotion);
}
catch (NoSuchFieldException e) {}
}
编辑:这在我的环境中工作( Java(TM)SE运行时环境(版本1.8.0_92-b14)),但我不确定是否它保证可以在每个JVM上运行。