2012-05-12 8 views
3

私は引数の1つとしてarrayListをとるコンストラクタに問題があります。Array - パラメータの1つとしてコンストラクタをリストし、新しいオブジェクトを作成する方法は?

public class ItemisedProductLine extends ProductLine{ 

public static ArrayList<String> serialNumbers; 

public ItemisedProductLine(String productCode, double recRetPrice, double salePrice, int quantity, String description, ArrayList<String> SerialNumbers){ 
    super(productCode, recRetPrice, salePrice, quantity, description); 
    this.serialNumbers = serialNumbers; 
}  

}私のクラスのインベントリで今すぐ

私は新しいItemisedProductLineをインスタンス化し、コンストラクタ

ItemisedProductLine item = new ItemisedProductLine("productCode", 2600, 2490, 2, "descrpition", new ArrayList<String>("1233456", "6789123")); 

にシリアル番号のarryListを渡したいが、Javaでこの可能ですか?それは一般的な仕事ではないように見えますが、例は見つかりませんでした。私が代わりにアレイ・リストの一般的な配列を使用することもできましたが、その後、私が原因不明のサイズで、私は

:-)別の括弧を忘れていないよ

ましょう希望を、それを初期化することはできません別の方法として

最後にエラーがありません "ArraList <見つかりませ適しコンストラクタ>" あなたが試みることができる

+1

補助的に、ArrayListの先頭のサイズを決定する必要はありません。配列に裏打ちされているだけなので、その名前に配列があります。実装の詳細にはほとんど注意を払う必要はありません。あなたが好きなようにリストを拡大/縮小することができます。 – Jeremy

+3

あなたの質問には関係ありませんが、好奇心が強いだけです。なぜあなたはコンストラクタの静的フィールドを設定しているのですか?また、新しいコンストラクタを変更または追加できる場合は、最後のフィールドをvarargにして、vararg配列からArrayListを構築することもできます。また、配列を格納するだけでも構いません。 –

答えて

23

new ArrayList<String>(Arrays.asList("1233456", "6789123")) 
+0

これはコンパイルされています....ありがとう、私は昨日尋ねるといいと思います... –

+0

billc.cn:実際には、実際にフィールドが静的である必要はありません、私はvarargを使用したことはありません全体の初心者)が、このオプションのおかげで、それを見て学ぶのは私の次のものになるでしょう。 –

1

@Edwin'あなたの答えは良いですが、簡単なキャストのためにArrayListコンストラクタを捨てることもできます。 Arrays.asListはすでにnew ArrayListを作成しています。

(ArrayList<String>) Arrays.asList("1233456", "6789123")

+1

'Arrays.asList()'の結果をキャストしてはいけません。なぜなら、実際に返される型が将来変更され、意図しないコードが失敗するからです。このメソッドは、私たちにはブラックボックスでなければならず、パブリックインターフェイスのみに依存する必要があります。すなわち、 'List'を返すということだけがわかります。 –

0

Java 8 Stream APIを使用して別の方法があります。
オブジェクトのストリームを作成し、リストとして収集することができます(または、何かを設定するか、またはyour own collectorをビルドすることができます)。

Stream.of(
     new MyClassConstructor("supplierSerialNo", "supplierSerialNo", String.class), 
     new MyClassConstructor("title", "title", String.class), 
     new MyClassConstructor("kind", "kind", String.class)) 
.collect(Collectors.toList()) 
関連する問題