簡體   English   中英

公共嵌套類中的靜態最終字段

[英]static final field in public nested class

我有這樣的代碼:

public class Foo {
    public class Bar implements Parcelable {
        public static final Parcelable.Creator<Type> CREATOR =
                   new Parcelable.Creator<Type>() {
                   @Override
                   ....
        }
    }
}

Eclipse 說:

The field CREATOR cannot be declared static in a non-static inner type, unless 
initialized with a constant expression

請告訴我是什么? 我認為這是因為我有一個嵌套類,但我不知道如何糾正錯誤。

內部類(非靜態嵌套類)不能有任何靜態方法。 因為

An inner class is implicitly associated with an instance of its outer class, it cannot define any static methods itself.

對於外部類Foo ,您可以像這樣訪問靜態方法test()

Foo.test();

對於靜態內部類Bar ,您可以像這樣訪問其靜態方法innerTest()

Foo.Bar.innerTest();

但是,如果Bar不是static ,則現在沒有引用方法innerTest()靜態方法。 非靜態內部類與其外部類的特定實例相關聯。

內部類不能有靜態方法......如果你想擁有它,你還需要將 Bar 定義為靜態方法。

否則,該字段必須聲明為非靜態的。

雖然不知道為什么,Java 禁止內部類中的靜態字段和方法。 解決此問題的唯一方法是聲明靜態內部類; 或者當然您可以使嵌套類中的字段為非靜態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM