我有这样的封闭和嵌套类:
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.
}
}
}
我自己找到了使用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 Runtime environment(build 1.8.0_92-b14((,但我不确定它是否能保证在每个JVM上工作。