2017-04-02 13 views
1

で静的コンテキストエラーから参照することはできません - コンパイル時にこのようなエラーメッセージがある理由:が疑問に思うのJava

ClassHierarchyTest1.thisが静的文脈

ソースコードから参照することはできません。

public class ClassHierarchyTest1 { 
    class Foo { 
     int a; 
     Foo(int b) { 
      this.a = b; 
     } 
    } 

    public static void main(String[] args) { 
     Foo f = new Foo(1); // this line has the error message 
    } 
} 
+0

内部クラスはメンバーと同じ方法で扱われます。あなたのものはそのクラスのインスタンスに拘束されているようです。 – peter

+0

注意:あなたは答えの1つを受け入れることが許されていますので、それを忘れないでください;-) – GhostCat

答えて

1

全く変です。

内部クラス自体は静的ではありません。したがって、常に外側の囲みクラスのオブジェクトが必要です。静的なメインにはないものがあります。

したがって、Fooを静的に変更する必要があります(もちろん、外部のthisは使用できません)。または、外部クラスのインスタンスを最初に作成し、そのオブジェクトに対してnewを呼び出さなければなりません。

0

は内部クラスであるため、あなただけClassHierarchyTest1のインスタンスを介してアクセスすることができ、あなたのクラスに

public class ClassHierarchyTest1 { 

class static Foo { 
    int a; 
    Foo(int b) { 
     this.a = b; 
    } 
} 

public static void main(String[] args) { 
    Foo f = new Foo(1); // this line has the error message 
} 
} 
+0

これはあまり答えではありません。説明なしの提案はそれほど役に立ちません。 – Carcigenicate

1

Fooを静的に追加します。

Foo f = new ClassHierarchyTest1().new Foo(1); 

別のオプションは、staticとしてfooを定義することです:

static class Foo{...} 
1

fooがClassHierarchyTest1のメンバーである。そのようなしたがって、メンバーにアクセスするにはClassHierarchyTest1をinorderで使用する必要があります。 Inner Classes

ドキュメントInnerClassのインスタンスのみOuterClassのインスタンス内に存在し、その親インスタンスのメソッドとフィールドへの直接アクセスを有することができます。

class OuterClass { 
    ... 
    class InnerClass { 
     ... 
    } 
} 

内部クラスをインスタンス化するには、まず外側のクラスをインスタンス化する必要があります。次に、この構文を使用して外側オブジェクト内の内側オブジェクトを作成します。

関連する問題