我的目标是非静态嵌套类,例如
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
}
}
我该怎么做?
内部类有一个合成(最终)字段,通常但并不总是称为
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);
}
}