4

グーグルで検索した後、私はその答えを見つけることができませんでした.私はJavaにあまり慣れていません.私はほとんどの場合C#を使用しています.C#を使用すると可能であり、おそらくJava.

Ps: ハイライトで申し訳ありません。ここでの使い方がわかりません。

私はコンストラクタを持っています:

public WeaponsData(ArrayList<NPC> _drop, ArrayList<NPC> _buy, ArrayList<NPC> _sell) { }

次に、ArrayLists() を直接作成するオブジェクトを作成しようとすると、機能しません。

public static WeaponsData AngelicAxe = new WeaponsData(new ArrayList<NPC>() { new NPC("Rat", "None", 0), new NPC("Dog", "None", 0) },
                new ArrayList<NPC>() { new NPC("Player", "All", 0) },
                new ArrayList<NPC>() { new NPC("Cain", "First", 5000) }
                );

Javaでそれを行う方法はありませんか?

ありがとうございました

4

8 に答える 8

6

ArrayList には、それを行うために必要なコンストラクターがありません。次の呼び出しで引数をラップできますArrays.asList()

public static WeaponsData AngelicAxe = new WeaponsData(
    new ArrayList<NPC>(
       Arrays.asList(
          new NPC("Rat", "None", 0),
          new NPC("Dog", "None", 0)
       )
    ),
// etc
);

または、 Guava Frameworkによって提供されるファクトリ メソッドを使用します。

public static WeaponsData AngelicAxe = new WeaponsData(
    Lists.newArrayList(
        new NPC("Rat", "None", 0),
        new NPC("Dog", "None", 0)
    ),
// etc.
);

もちろん、Guava を使用する場合は、明らかに定数を実装しようとしているため、代わりに不変のコレクションを使用する必要があります。

public static final WeaponsData ANGELIC_AXE = new WeaponsData(
    ImmutableList.of(
        new NPC("Rat", "None", 0),
        new NPC("Dog", "None", 0)
    ),
// etc.
);
于 2012-08-27T14:57:41.683 に答える
2

Eclipseコレクションを使用している場合は、FastList実装を使用してリストを作成できます。 より豊富なEclipseコレクション固有のタイプをFastList実装します。modCountをサポートしていなくてもかまわない場合は、java.util.Listの代わりにドロップとして使用できます。ArrayListを使用すると、コードは次のようになりますFastList

public static WeaponsData AngelicAxe = new WeaponsData( 
    FastList.newListWith( 
          new NPC("Rat", "None", 0), 
          new NPC("Dog", "None", 0) 
    ), 
// etc 
); 

注:私はEclipseコレクションのコミッターです

于 2012-09-06T15:26:42.667 に答える
1

要素を追加するには、arraylist で add を呼び出す必要があります。

ArrayListには、カスタム オブジェクトを持つコンストラクターがありません。

例:

new ArrayList<NPC>().add( new NPC("Player", "All", 0));

編集:追加の連鎖が必要な場合は、Arrays.asList(..) を使用する必要があります。

于 2012-08-27T14:57:10.090 に答える
1

これを試して:

new ArrayList<NPC>(Arrays.asList(new NPC[] { new NPC("Rat", "None", 0), new NPC("Dog", "None", 0)})) 

--> NPC の配列を作成し、それからリストを作成します

于 2012-08-27T15:00:45.593 に答える
0

あなたが試したことは、データの配列に対して行うことができますが、ArrayList

これは機能します:

new NPC[] {new NPC(...)};

これはしません:

new ArrayList<NPC>() {new NPC(...)};
于 2012-08-27T14:59:12.000 に答える
0

そのようなインライン初期化子は、デフォルトでは Java でサポートされていません。Java には「似ている」ものがありますが、まったく同じではありません。

インラインで ArrayList を定義する方法を次に示します (「二重ブレースの初期化」と呼ばれる手法を使用):

ArrayList<NPC> npcs = new ArrayList<NPC>()
{ {
   add(new NPC());
   add(new NPC());
}};

ご覧のとおり、あまり良くありません。実際には、ArrayList クラスの代わりに ArrayList のサブクラスのインスタンスを作成しています。

Java では、タイプを使用して変数を定義するのが通例であるList<T>ため、任意の List 実装を使用できます。

代わりにこれを考慮してください:

public WeaponsData(List<NPC> _drop, List<NPC> _buy, List<NPC> _sell) { }

次に、次のことができます。

public static WeaponsData AngelicAxe = new WeaponsData(
  Arrays.asList( new NPC("Rat", "None", 0), new NPC("Dog", "None", 0) ),
  Arrays.asList( new NPC("Player", "All", 0) ),
  Arrays.asList( new NPC("Cain", "First", 5000) ) );

コレクションの作成と操作を支援する多くのヘルパー メソッドを備えた非常に優れたコレクション ライブラリを持つ Google Guava ライブラリ セットもあります。

確認してください: http://code.google.com/p/guava-libraries/およびユーザー ガイド

于 2012-08-27T15:04:40.793 に答える
0

Arrays.asList() とは別に、二重ブレースの初期化も使用できます。

ArrayList<NPC> list = new ArrayList<NPC>() {{
    add(new NPC("Rat", "None", 0));
    add(new NPC("Dog", "None", 0));
}};
于 2012-08-27T15:00:55.803 に答える
0

いくつかのスタイル + 柔軟性:

public WeaponsData(ArrayList<NPC> _drop, ArrayList<NPC> _buy, ArrayList<NPC> _sell) { }

次のようにする必要があります。

public WeaponsData(Collection<NPC> drops, Collection<NBC> buys, Collection<NPC> sells)  {}  

Collection用途 を移入するには

 Collection.add(element);  

構文を{ foo,bar,baz} 使用する場合は、配列を使用します。そのようです:

NPC[] npcs = new NPC[] {foo,bar,bax};  

Arrays.asList(npcs)その後、それを元に戻すことができますList

于 2012-08-27T15:01:04.397 に答える