2012-04-20 8 views
0

私たちは、文字列の配列を宣言like-アレイは

String[] a={"A"}; 

しかし、メソッドは、引数として文字列の配列を有している場合には、なぜ我々は

コード -

mymethod({"A"}); 
like-メソッドを呼び出すことはできません
class A{ 
    static void m1(String[] a) { } 
    public static void main(String args[]){ 
     m1(new String []{});//OK 
      m1({}); //Error 
     } 
    } 

答えて

4

これは言語の指定方法です。 section 10.6 of the JLSから:

配列イニシャライザは、(14.4、§9.3、§8.3)宣言で指定されてもよい、または配列生成式(15.10)の一部として、アレイを作成し、いくつかの初期を提供します値。

だから、あなたはそれが宣言で働いて見てきた、とarray creation expressionは開始時にnew ArrayElementTypeが含まフォームです:

myMethod(new String[] {"A"}); 

ベア心​​の中でそれが宣言の一部だとき、そこだけだと1つの要素タイプが考えられます。メソッドの呼び出しでは、複数のオーバーロードされたメソッドなどがあります。基本的には、オーバーロードの解決に参加する前に、{"A"}という式を文字列配列としてに評価する必要があります。比較のビットに対する

、あなたが書くことができるだろうように、同じことが、要素タイプは値から推論されるC#3を導入暗黙に型付けされた配列が、C#で真である:

// C# 3 
MyMethod(new[] {"A"}); 

あなたはまだnew[]の部分が必要です。

1

このような配列を渡すことはできません。それを変数として宣言し、代わりにその変数をメソッドに渡します。

5

構文はちょっとありますが、できます。

mymethod(new String[]{"A"});