我一直在開發一個小型應用程序的工作,我遇到了一些我不明白的東西。爲什麼自定義實例的ArrayList上的.contains方法工作?
在下面的代碼中,我有一個名爲'Product'的Custom Class的ArrayList,其中包含'String'類型的數據。我在這個ArrayList上使用.contains方法來確保它不包含某個String。
我的IDE給了我'可疑調用java.util.Collections.contains:給定對象不能包含字符串(預期產品)'的實例'的警告。
我完全理解上面的消息,因爲我比較了兩種不同的類型,所以它如何才能正確評估?我在想這一定是因爲'Product'類包含我想要比較的數據,所以默認在Product類中使用toString方法(我在類中重寫了這個),並將其與我想要的字符串進行比較比較它。
這對我來說似乎是JVM黑魔法。
private void createOrderListing(List<String[]> orderList)
{
//For each line of the order list file
for(String[] s : orderList)
{
if(s.length >= 28) //OrderLine should be of this length
{
if (!s[0].equalsIgnoreCase("ProductCode") && !s[0].isEmpty()) //Makes sure we're not including headers
{
//How does this bit work?
if(!productListing.contains(s[0]))
{
OrderLine order = new OrderLine();
//References product code of Product against Order Line, if match, then pack sizes and other basic fields ammended as appropriate
boolean productFound = false;
for (Product p : productListing)
{
if (s[0].contentEquals(p.getProductCode()))
{
order.initialAmendOrderLine(p.getProductCode(), p.getProductName(), p.getPackSize(), p.getProductType());
productFound = true;
}
}
if(productFound)
{
order.setOrderValues(s);
orderListing.add(order);
}
}
//System.out.println("\nOrder Product is: " + order.getProductName()+ "\nOrder Pack Size is: " + order.getInternalPackSize());
}
}
}
}
UPDATE
這部作品在評論中指出的原因是,該塊始終是真實的(該方法。載始終是假的,!這逆,因此,真正的)。對不起,我的粗心,並指出我的粗心。
如果'Product'的equals()'方法與'String'參數相等,'contains()'方法*可以工作。它不應該在技術上違反equals()的合約,但它可以這樣做。 – Andreas
哪種類型是productListing?我假設你所說的是類似於列表 –
sirandy
productListing是類型列表 –
aliwaii