Java 为什么调用构造函数时不能访问OuterClass.this?
在为算法编写解释性GUI时,我偶然发现了一些东西 我完全理解为什么以下方法不起作用:Java 为什么调用构造函数时不能访问OuterClass.this?,java,Java,在为算法编写解释性GUI时,我偶然发现了一些东西 我完全理解为什么以下方法不起作用: public class Superclass { public Superclass (int someValue) { // do something } } // new file private class Subclass extends Superclass { int someValue; public Subclass () {
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
private class Subclass extends Superclass {
int someValue;
public Subclass () {
super (this.someValue);
this.someValue = 0;
}
}
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
public class OuterClass {
private class InnerSubclass extends Superclass {
int someValue;
public InnerSubclass () {
super (this.someValue);
this.someValue = 0;
}
}
// some code of OuterClass
}
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
public class OuterClass {
int someValue;
private class InnerSubclass extends Superclass {
public InnerSubclass () {
super (OuterClass.this.someValue);
}
}
public OuterClass () {
this.someValue = 0;
}
// some code of OuterClass
}
子类尚未完全初始化,因此使用this
没有任何意义
我也理解为什么这不起作用:
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
private class Subclass extends Superclass {
int someValue;
public Subclass () {
super (this.someValue);
this.someValue = 0;
}
}
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
public class OuterClass {
private class InnerSubclass extends Superclass {
int someValue;
public InnerSubclass () {
super (this.someValue);
this.someValue = 0;
}
}
// some code of OuterClass
}
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
public class OuterClass {
int someValue;
private class InnerSubclass extends Superclass {
public InnerSubclass () {
super (OuterClass.this.someValue);
}
}
public OuterClass () {
this.someValue = 0;
}
// some code of OuterClass
}
这种情况不会因为子类是内部类这一事实而改变
我不明白的是为什么这不起作用:
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
private class Subclass extends Superclass {
int someValue;
public Subclass () {
super (this.someValue);
this.someValue = 0;
}
}
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
public class OuterClass {
private class InnerSubclass extends Superclass {
int someValue;
public InnerSubclass () {
super (this.someValue);
this.someValue = 0;
}
}
// some code of OuterClass
}
public class Superclass {
public Superclass (int someValue) {
// do something
}
}
// new file
public class OuterClass {
int someValue;
private class InnerSubclass extends Superclass {
public InnerSubclass () {
super (OuterClass.this.someValue);
}
}
public OuterClass () {
this.someValue = 0;
}
// some code of OuterClass
}
请注意,我使用的是OuterClass.this
,而不是InnerSubclass的this
。外部类对象需要初始化,以便内部类对象甚至可以创建。我能想到的唯一不正确的情况是,如果内部类是静态的,在这种情况下,OuterClass。这根本不能被引用
你知道为什么上面的代码仍然会产生一个VerifyError
?什么Java编译器吗?你能发布构造函数的精确反编译签名吗?你如何创建内部类的实例?你从哪里得到错误/堆栈跟踪消息?这对我来说没有任何问题OuterClass.InnerSubclass InnerSubclass=OuterClass.new InnerSubclass()代码>什么Java编译器?你能发布构造函数的精确反编译签名吗?你如何创建内部类的实例?你从哪里得到错误/堆栈跟踪消息?这对我来说没有任何问题OuterClass.InnerSubclass InnerSubclass=OuterClass.new InnerSubclass()代码>