2016-05-20 15 views
-1

メソッドをJavaの静的型引数で宣言できますか?いいえ、なぜですか?メソッドをJavaの静的型引数で宣言できますか?いいえ、なぜですか?

例:

class A 
{ 
    void m(static int x) 
    { 
     System.out.println(x); 
    } 
} 
+0

これはどのような用途ですか? –

+0

私はそれがなぜ不可能であるか知りたいです。 – asit

+1

これはどういう意味ですか? Javaのキーワード 'static'は、さまざまなコンテキストで特定の意味を持ちますが、これは定義されているコンテキストではありません。あなたは何を意味しますか? –

答えて

0

ありません、それは(コンパイラエラー)許可されませんし、それは同様に理にかなっています。 staticキーワードは、変数がスコープ内にインスタンスを1つしか持たず、そのインスタンスがそのスコープの外側で見えないことを意味します。これはどちらも関数の引数には意味がありません。

§6.7.5.3/ 2: "パラメータ宣言で発生する唯一のストレージクラス指定子はレジスタです。"

+0

私は上記のすべてのものを知っていましたが、私は静的な引数を渡すことができない理由を知りたいだけです。静的な意味を知ることができます。 – asit

+0

Java仕様では許可されていないため、コンパイラがエラーを発するので、渡すことはできません。なぜJavaの仕様では、上記の応答ですでに上で言及されています。 –

1

私はこれが可能であるとは思わないし、それを行うための有効なユースケースは考えられません。

シングルトンパターンを実装するためにメソッドを静的にすることは意味があります。

A.m(1); 

また、あなたが予期しない動作を避けるために、xは不変にしたいかもしれません:

class A 
{ 
    static void m(int x) 
    { 
     System.out.println(x); 
    } 
} 

そして、それは次のようにインスタンス化することなく使用することができます。

class A 
{ 
    void m(final int x) 
    { 
     System.out.println(x); 
    } 
} 

ただし、x staticを作成することは目的がありません。

0

静的メンバーは、クラスレベルのメンバーとみなされ、 クラスインスタンスの依存性を持たないことが望ましいことを意味するクラスローディング、中にメモリに をロードされます。

したがって、クラスにはメンバメソッドmがあり、メソッド本体を実行するにはparameterを渡す必要があります。あなたはどんな意味がありません それは法外の存在を持っていないので、それのための静的メンバを宣言した場合

は、クラスはそれがひどく述べたすべてのルールに違反した時間をロードに関する一切 情報を持っていません上記の 。

関連する問題