我正在尝试将我的代码从c#移到java,这是我第一次尝试编写java代码。
首先我注意到一个List<>在c#中不是作为java中的列表,我必须使用arrayList,所以我只是改变了
List<Instruments> instruments = new List<Instruments>();
到
List<Instruments> instruments = new ArrayList<Instruments>();
这解决了这个问题。
稍后在我的程序中,我有一个for循环,它通过List(抽象的“Instruments”类)运行,并比较所有子类具有的枚举(保存在.type中)。 I:E
public static int HowManyOfType(InstrumentType TP)
{
int HowMany = 0;
for (int i = 0; i < instruments.Size(); i++)
{
if (instruments[i].type == TP)
HowMany++;
}
return HowMany;
}
但是我收到消息“预期的阵列类型”。 在c#中不会发生此问题,因为该属性存储在抽象类中,它只是进行比较而无需知道存储的子类的类型。 我猜它在java中并不那么简单。周围有这个吗? 感谢
答案 0 :(得分:1)
更改此
if (instruments[i].type == TP)
到
if (instruments.get(i).type == TP)
答案 1 :(得分:1)
将for循环更改为此。
for (Instruments eachInstrument : instruments) {
if (eachInstrument.type == TP) {
howMany++;
}
}
虽然不知道eachInstrument.type
的数据类型是什么,但我无法确定使用==
是否正确。您可能需要将其更改为eachInstrument.type.equals(TP)
。
答案 2 :(得分:1)
如果您习惯使用C#,您可能会发现Java 8中的lambdas更自然。
long howMany = instruments.stream().filter(t -> t.type == TP).count();
除非类型是基元或枚举,否则您可能需要使用等于
long howMany = instruments.stream().filter(t -> t.type.equals(TP)).count();