[英]Inner class cannot construct new instance of other inner class
我有一個名為Scraper
的類,帶有一個靜態內部類Builder
,還有一個非靜態內部類StringPair
,我試圖獲得一種構建器方法來構造一個new StringPair(a,b)
並將其添加到ArrayList<StringPair>
,但是不會編譯,編譯器會說Error: non-static variable this cannot be referenced from a static context
並且特別突出顯示new StringPair(a,b)
作為問題的根源。
我不明白這里出了什么問題,我們將不勝感激!
class Scraper {
private final ArrayList<StringPair> stringPairs;
Scraper(Builder builder) {
stringPairs = builder.builderStringPairs;
}
public static class Builder {
private static ArrayList<StringPair> builderStringPairs = new ArrayList<StringPair>();
public Builder addStringPairs(String a, String b) {
builderStringPairs.add(new StringPair(a, b));
return this;
}
public Scraper build() {
return new Scraper(this);
}
}
class StringPair {
String a,b;
StringPair(String a, String b) {
this.a = a;
this.b = b;
}
String getA() {
return a;
}
String getB() {
return b;
}
}
}
Builder
不是內部類,它只是一個嵌套類,沒有對包含類( Scraper
)的實例的隱式引用。
但是, StringPair
是內部類。 為了構造StringPair
的實例,您需要引用Scraper
的實例。 因此,使Builder
工作的選項:
StringPair
成為嵌套類(靜態) 在某個地方為Builder
一個實例,此時可以使用:
builderStringPairs.add(instance.new StringPair(a, b));
我懷疑第二個選項在這里是最合適的-我看不到StringPair
需要引用Scraper
實例的任何原因。
有關嵌套類和內部類的更多信息,請參見JLS的8.1.3節 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.