2017-10-15 7 views
2

私はちょうど内部のクラスを試していて、ローカルで静的な内部クラスを持っているというこのアイデアに遭遇しました...まあ、静的メソッド内で内部クラスを作った..まあそれだけで簡単です.. ここに私がした例ですローカルスタティックインナークラスと呼ばれるものがありますか?

class Outer { 

    static void m() { 
     class LocalStatic { 

      void s() { 
       System.out.println("static local inner class method"); 
      } 

     } 
    } 
} 

class Demo { 

    public static void main(String args[]) { 

     Outer.m(); 
    } 
} 

これはコンパイルエラーではありません。

私は静的メソッドmにアクセスする方法を知っています。しかし、私はローカルクラスにアクセスする方法があるかどうかを知りたいですLocalStatic外部クラスから..私の理解にしても、メソッドの中の何かにアクセスすることはできませんか?したがって、私はどちらかLocalStaticまたは任意のメソッドにアクセスしたり、だけは確かにしたかったクラスの外部からそのローカルクラス内の属性をすることはできません。..

+0

"ローカルクラスのLocalStaticに外部クラスからアクセスする方法があるかどうかを知りたい"いいえ、メソッドmの本体にスコープがあるためです。 –

+0

ローカルクラスは、定義したメソッド内でしかアクセスできません。 – QBrute

答えて

6

私がアクセスへの道があるかどうかを知りたいです外部クラスのローカルクラスLocalStatic

これを行う方法はありません。ローカルクラスもローカルなので、アクセスする唯一の方法はクラスがスコープ*にあるメソッドからです。

あなたは非ローカルベースクラスやインタフェースを使用してローカルクラスのオブジェクトにアクセスすることができます。

interface SomeInterface { 
    void s(); 
} 
class Outer { 
    static SomeInterface m() { 
     class LocalStatic implements SomeInterface { 
      public void s() { 
       System.out.println("static local inner class method"); 
      } 
     } 
     return new LocalStatic(); 
    } 
} 

今、あなたはそれが行く*

SomeInterface i = Outer.m(); 
i.s(); 

Demo.

を書くことができます反射を介してこれらのクラスにアクセスする方法もあるが、それはJの能力の外にあるava言語そのもの。

+0

興味深い..ありがとう=)私たちはローカルクラスLocalStaticを別の外部クラスからも拡張することでこれを行うことができますか? –

+0

@DiliniPeirisもちろん、そうです。 – dasblinkenlight

0

メソッド、コンストラクタ、またはイニシャライザの内部でクラスを宣言できます。そのようなクラスはローカルクラスと呼ばれます。メソッドが静的であるかどうかは関係ありません。そのクラスは、宣言されているメソッドまたはコンストラクタまたはイニシャライザ以外のコードのどの部分からでも参照することはできません。

ローカルクラスはほとんど使用されません。私は、クラスがメソッドの中で宣言できることを知らなかった数年間、プロのJavaプログラマーであった人々を知っています。

+2

私のように。私はこのためにJava証明書に失敗したでしょう。私はコースの匿名のクラスについて知っていたが、この構造は私には分かっていなかった。 –

+0

しかし、匿名の内部クラスはローカルクラスの型ですか?私たちは、匿名クラスを使用する際に匿名クラスを使用します。 –

+0

私は用語を100%確信しているわけではありませんが、ローカルクラスはメソッド/コンストラクタ/イニシャライザで定義された名前付きクラスを参照するため、 –

1

"私はLocalStaticにアクセスすることはできませんまたはクラスの外側からそのローカルクラス内の任意のメソッドや属性にアクセスすることはできません.."スコープはOuterクラスよりもさらに小さくなります - LocalStaticクラスにアクセスできますのみm()方法です。

1

タイトルの質問への答えは、静的コンテキスト(静的メソッドまたは静的初期化子)でローカルの内部クラスを宣言できますが、それから囲むクラスインスタンスはありません。だから、私は誰がいることをそれらを呼び出す見たことがないローカル静的ネストされたクラスに

ローカル静的な内部クラス

または多分

それを呼び出すために、いくつかの意味がありますまたは実際にそれらを使用する。

+0

ローカルクラスを指摘するためにUpvotedを初期化子で定義することができます。 –

関連する問題