方法/构造函数中的ArrayList-Java
在谷歌搜索之后,我找不到答案,我对Java不太熟悉,我大部分时间使用C语言,我知道使用C语言是可能的,而且可能是Java语言 Ps:对不起,这里的亮点,我不知道怎么用 我有一个构造器:方法/构造函数中的ArrayList-Java,java,arraylist,Java,Arraylist,在谷歌搜索之后,我找不到答案,我对Java不太熟悉,我大部分时间使用C语言,我知道使用C语言是可能的,而且可能是Java语言 Ps:对不起,这里的亮点,我不知道怎么用 我有一个构造器: public WeaponsData(ArrayList<NPC> _drop, ArrayList<NPC> _buy, ArrayList<NPC> _sell) { } 公共武器数据(ArrayList\u drop,ArrayList\u buy,ArrayList\
public WeaponsData(ArrayList<NPC> _drop, ArrayList<NPC> _buy, ArrayList<NPC> _sell) { }
公共武器数据(ArrayList\u drop,ArrayList\u buy,ArrayList\u sell){
然后,当我尝试创建对象并直接在其上创建ArrayList()时,它不起作用:
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) }
);
public static WeaponsData AngelicAxe=new WeaponsData(new ArrayList(){new NPC(“老鼠”,“无”,0),new NPC(“狗”,“无”,0)},
新建ArrayList(){newNPC(“玩家”,“所有”,0)},
新ArrayList(){newNPC(“凯恩”,“第一”,5000)}
);
在Java上没有办法做到这一点
谢谢您需要调用add-on-arraylist来添加元素 没有自定义对象的构造函数 例如:
new ArrayList<NPC>().add( new NPC("Player", "All", 0));
newarraylist().add(newnpc(“Player”,“All”,0));
编辑:如果需要添加链接,则需要使用Arrays.asList(..)。ArrayList没有必要的构造函数来执行此操作。您可以在调用
Arrays.asList()
时包装参数:
当然,如果您使用番石榴,您可能应该使用一个不可变的集合,因为您显然试图实现一个常量:
public static final WeaponsData ANGELIC_AXE = new WeaponsData(
ImmutableList.of(
new NPC("Rat", "None", 0),
new NPC("Dog", "None", 0)
),
// etc.
);
您尝试的内容可以针对数据数组执行,但不能针对
ArrayList
这项工作:
new NPC[] {new NPC(...)};
这并不是:
new ArrayList<NPC>() {new NPC(...)};
newarraylist(){newnpc(…)};
试试这个:
new ArrayList<NPC>(Arrays.asList(new NPC[] { new NPC("Rat", "None", 0), new NPC("Dog", "None", 0)}))
newarraylist(Arrays.asList(newnpc[]{newnpc(“老鼠”,“没有”,0),newnpc(“狗”,“没有”,0)}))
-->创建NPC的数组,并在数组之外从中创建列表。asList()还可以使用:
ArrayList list=new ArrayList(){{
添加(新NPC(“Rat”,“无”,0));
添加(新NPC(“狗”,“无”,0));
}};
两件事风格+灵活性:
public WeaponsData(ArrayList<NPC> _drop, ArrayList<NPC> _buy, ArrayList<NPC> _sell) { }
如果要使用{foo,bar,baz}
的语法,请使用数组。像这样:
NPC[] npcs = new NPC[] {foo,bar,bax};
然后,您可以执行
Arrays.asList(npcs)
操作,将其重新放入列表中Java默认不支持的内联初始值设定项。Java有一些“看起来”相似的东西,但并不完全相同
以下是如何定义ArrayList内联(使用称为“双括号初始化”的技术):
还有一组Google Guava库,它有一个非常好的集合库,其中有许多辅助方法,可以帮助创建和操作集合:
查看:如果您正在使用,您可以使用实现创建一个列表FastList
实现了java.util.List
以及更丰富的Eclipse集合特定类型。如果您不介意它不支持modCount,那么它可以作为ArrayList
的替代品。使用FastList
,您的代码如下所示
public static WeaponsData AngelicAxe = new WeaponsData(
FastList.newListWith(
new NPC("Rat", "None", 0),
new NPC("Dog", "None", 0)
),
// etc
);
注意:我是Eclipse集合的提交者,add
方法不允许链接add调用,而op需要链接add调用;在本例中,他试图创建一个包含多个元素的列表。可以,但不应该。这是一个很好的技巧,但却是一个糟糕的编码实践!
public WeaponsData(ArrayList<NPC> _drop, ArrayList<NPC> _buy, ArrayList<NPC> _sell) { }
public WeaponsData(Collection<NPC> drops, Collection<NBC> buys, Collection<NPC> sells) {}
Collection.add(element);
NPC[] npcs = new NPC[] {foo,bar,bax};
ArrayList<NPC> npcs = new ArrayList<NPC>()
{ {
add(new NPC());
add(new NPC());
}};
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) ) );
public static WeaponsData AngelicAxe = new WeaponsData(
FastList.newListWith(
new NPC("Rat", "None", 0),
new NPC("Dog", "None", 0)
),
// etc
);