假设我有一个“外部” 类,其中将“内部” 类作为嵌套的非静态类。
假设在main()
中创建了名为“ a” 的“外部” 类的实例。
假设我使用“ a” 创建一个名为“ in” 的“ Inner” 实例。
我的问题是:如何从对象“ a”中获取实例“ in”中的变量,该实例“应为” a”的一部分?
以下是一个示例:
https://www.baeldung.com/java-synthetic
我尝试使用它,但是似乎超出了我的私有字符串字段。我尝试设置Inner实例的字符串,然后获取它-但我得到的只是空值。
public class Synthetic {
public static void main(String[] args) {
SyntheticMethodDemo a = new SyntheticMethodDemo();
SyntheticMethodDemo.NestedClass in = a.new NestedClass();
a.setNestedField("hello");
System.out.println(a.getNestedField());
}
} //this is my addition
class SyntheticMethodDemo {
class NestedClass {
private String nestedField;
}
public String getNestedField() {
return new NestedClass().nestedField;
}
public void setNestedField(String nestedField) {
new NestedClass().nestedField = nestedField;
}
} //this is the code from the site
我期望由于运行main()而打招呼,但是我得到“空” 代替
答案 0 :(得分:0)
在SyntheticMethodDemo
的获取和设置器中,您总是创建内部类NestedClass
的新实例,操纵或检索nestedField
的值,但从不存储对{{ 1}}实例。从那时起,Baeldung的例子是没有用的,并且具有误导性。
我对示例进行了调整,使其存储了嵌套类的实例,该实例应可使您的代码按预期运行:
NestedClass
答案 1 :(得分:0)
据我了解,您希望能够通过包含内部类的外部类的实例来访问内部类的字段。您可以这样保存对外部类的内部类的引用。
public class Synthetic {
public static void main(String[] args) {
SyntheticMethodDemo a = new SyntheticMethodDemo();
SyntheticMethodDemo.NestedClass in = a.new NestedClass();
a.setNestedField("Hello");
System.out.println(a.getNestedField());
} // this is my addition
}
class SyntheticMethodDemo {
NestedClass nc;
class NestedClass {
private String nestedField;
NestedClass() {
nc = this;
}
}
public String getNestedField() {
return nc.nestedField;
}
public void setNestedField(String nestedField) {
nc.nestedField = nestedField;
}
} // this is the code from the site
我相信您的问题是,与内在和外在类存在一对一的对应关系,您无法摆脱。您始终可以从单个外部实例创建任意数量的独立内部类。但是,当您尝试从outer instance
访问它们时,该instance
不知道您要哪个inner instance
。因此,您必须save
或其他map
中的所有内部实例data structure
并指定一个id
才能获得正确的内部实例。
这很容易做到,但是我不确定会带来什么好处。