2012-02-10 15 views
8

にこのような配列を渡すことができないのはなぜ私が持っている機能:私は、Java

draw(int[] a) 
{ 
    //... 
} 

を、私は、配列{3,4,5}に渡したいです。なぜ電話できないのですか。

draw({3,4,5}); 
+0

ref:http://stackoverflow.com/questions/1610757/pass-array-to-method-javaこちらをご覧ください。http://www.jforeach.com/difference-between-object-and- Javaでのリファレンス/ 62 –

答えて

7

{3,4,5}のタイプはあいまいです(int[],short[]long[]など)。試してください:

draw(new int[]{3,4,5}); 
1

{3,4,5}は配列ではありません。 (そうだった場合は、配列は何ですか?ですか?)

2

{3,4,5}はどのタイプが反映されていません。あなたはこのように呼び出すべきですdraw(new int[]{3,4,5});

2

Javaはmatlabではないので!配列を作成/登録してから渡す必要があります。

+2

Matlabでも配列を作成する必要があります。 Matlabはこれを行うためのより簡潔な構文を持っています。 –

1

この方法で渡すことができます:draw(new int[]{3,4,5})

2

は、それは意味をなさない先行new int[]ことなく、アレイの初期化方法は、draw(new int[]{3,4,5})

{3,4,5}としてそれを呼び出す必要があります。 {3,4,5}を新しい配列を返すint[]という関数のパラメータとして見ることができます。

0

配列は参照渡しです。参照渡しとは、配列が引数として渡されたときに、そのメモリアドレス位置が実際に渡され、参照として参照されることを意味します。

  1. {3,4,5}は、どのタイプを使用するのかを反映していません。
  2. パスの配列が必要な場合は、このdraw(new int [] {3,4,5})のように呼び出す必要があります。メソッドは配列を使用することを知ることができます。
1

他のアンサーを参照してください。試してみるとどうしてできないのですか?

しかし、あなたはこのような何か行うことができます:私はここに他の答えの一部に対応したいと思います

draw(int... a) 
{ 
    //... 
} 

draw(3,4,5); 
+0

はい、これは私にとっても好きな方法です。なぜなら、あなたはまだ "普通の"アラーレーを渡すことができるからです。 – Axel

0

を。それは、配列作成のためのその構文をサポートしない言語設計の選択でした。しかしおそらく、この構造は常に曖昧なものではない。ちょうど{3,4,5}が「あいまいである」と言ったり、「タイプを反映していません」とは単純化しすぎています。

配列の初期化式ではあいまいである可能性がありますが、配列の作成の省略形としてはありますが、{3,4,5}のような単純な場合はありません。タイププロモーションルールを使用して、x+y+zのような算術式の型が決定されるのと同じ方法で、{x,y,z}のような配列初期化子の型を明白に決定するための規則を定義できます。この場合、{3,4,5}int[]またはshort[]になりますか? 3,4、および5がintであるため、int[]になります。

インターフェイスを持たないオブジェクトの場合でも、{x,y,z,...}のタイプは、すべての配列要素式が割り当て可能な最も一般的なスーパークラスであると言えるでしょう。あなたがするならば、最も低い共通分母。

しかし、インターフェイスでは事実上複数の継承があるので、配列のすべての要素を割り当てることができる複数のスーパータイプがあるかもしれませんが、それらのスーパータイプはどちらも互いに割り当てられないので、あいまいさがあります。

ゼロ要素の場合は{}ですが、これはあいまいです。

言語設計者は、「独自の配列初期化式は、new T[]{...}のように扱われます」というルールを提供しています。インターフェースを使っても、彼らはそれを提供して、「...型が明白でない場合はコンパイルエラーです」と付け加えることができました。しかし、彼らはしなかった。たぶん、彼らはあいまいさを許したくないからです。コンパイラや開発者にとって型判定の規則が複雑になるためかもしれません。たぶん、彼らはヒープ上に小さな配列の束を割り当てるのが簡単すぎないようにしたいので。しかし、{3,4,5}は根本的に解釈することが不可能ではないためではありません。