2012-02-19 18 views
5

私は指定されたタイプの任意の数の引数を受け入れ、Javaのメソッド持ってする方法があります見ることができます: http://www.java-tips.org/java-se-tips/java.lang/how-to-pass-unspecified-number-of-arguments-to-a-m.htmlJavaで任意の数の引数を受け入れるメソッドを作る方法は?

はなく、任意のタイプの任意の数の引数を受け取るメソッドを作成する方法があります? Java(登録商標)、任意の参照型の変数に

+1

'(Object ... arguments)'? –

答えて

9

すべてのJavaオブジェクトはObjectクラスを拡張します。あなたが得る最も近いsomeMethod(Object ... args)ある

public void func(Object... args) { 
} 
5
public void omnivore(Object... args) { 
    // what now? 
} 

いくつかの一般的なタイプのものを含む(オブジェクトおよび配列)もワイルドカードは、Object型のパラメータに渡すことができます。任意のプリミティブ型の変数は、参照型である対応するラッパー型に自動ボクシングすることができるため、Objectとして渡すことができます。したがって、Object...は任意の数のものを受け入れます。

3

使用この構文:

void myMethod(Object... args) { 
    // Here, args is an array of java.lang.Object: 
    // you can take its length, get its elements with [i] operator, 
    // and so on. 
} 
1

public void func(Object[] args) { 
} 

それとも、何も渡さないことができるようにしたい場合は:だからあなたはあなたの関数は、オブジェクトの配列を受け入れることができます。

厳密には、これはすべての引数型を受け入れません。具体的には、プリミティブ型は受け付けません。これは、対応するラッパー型にボックス化されている必要があります。通常これは違いはありません。しかし、呼び出されたメソッドでプリミティブ型とラッパー型を区別する必要がある場合は、そのようになります。

+0

お返事ありがとうございます。実際には、私はあなたの提案された 'someMethod(Object ... args)'を試しています。プリミティブ型とオブジェクト型の両方を渡す問題はないようです。 'someMethod(99,1.23、" A String "、新しい文字列(Aラッパー文字列)、anObject);'しかし、Javaは私のために原型をアップしているかもしれません。知っている:) –

+1

@fleawhale - ** **あなたのためにそれらをラップしています(autoboxing)。しかし、私の指摘は、呼び出されたメソッドが、呼び出し元が明示的にラッパー・オブジェクトを提供した場合から自動ボクシングされたプリミティブ値を提供した場合を、区別することができないことです。 –

+0

これは意味があります。 –

関連する問題