有没有办法修改封闭类引用?

时间:2016-08-15 12:18:04

标签: java reflection nested gson

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

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.
        }
    }
}

1 个答案:

答案 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上运行。