有没有一种方法可以修改封闭类引用



我有这样的封闭和嵌套类:

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.thisnull。手动设置它是不可能的,因为语句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上工作。

相关内容

  • 没有找到相关文章

最新更新