从 mixin 到内部类访问外部类的实例

问题描述 投票:0回答:1

我的目标是非静态嵌套类,例如

package whatever;
class Outer {
    public int x;
    class Inner {
        public void foo();
    }
}

我想为内部类编写一个 SpongePowered Mixin 来引用外部类的字段,例如

@Mixin(targets = "whatever.Outer$Inner")
class InnerMixin {
    @Overwrite
    public void foo() {
        System.out.println(Outer.this.x); //This doesn't work
    }
}

我该怎么做?

java inner-classes mixins spongeapi
1个回答
0
投票

内部类有一个合成(最终)字段,通常但并不总是称为

this$0
,其中包含外部类的实例。这个字段可以通过反射来获得,如this答案,或者使用混合它可以被遮蔽:

@Mixin(targets = "whatever.Outer$Inner")
class InnerMixin {
    @Shadow @Final Outer this$0;

    @Overwrite
    public void foo() {
        System.out.println(this$0.x);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.