public class Shop
{
private static List<Product> products = new List<Product>(){};
}
代碼拋出異常:不是抽象的,在列表中不重寫抽象方法子列表(INT,INT)Java靜態列表實現
public class Shop
{
private static List<Product> products = new List<Product>(){};
}
代碼拋出異常:不是抽象的,在列表中不重寫抽象方法子列表(INT,INT)Java靜態列表實現
你不能實例化一個列表,它只是一個接口。因此實例化它的一個實現,例如ArrayList:
public class Shop
{
private static List<Product> products = new ArrayList<Product>();
}
List
是一個接口。您無法初始化接口的實例。您需要初始化實現List
的類,如ArrayList
。
private static List<Product> products = new ArrayList<Product>(){};
正如在其他的答案中提到這裏java.lang.List
是interface
。我想再補充一點。 List
是一個interface
表示它定義必要的合同必須遵守和由任何類別履行到合格列表。這樣的類的用戶可以肯定所遵循的合同,所以不用擔心內部源代碼,他們可以確定它遵循所有標準的預定義規則來作爲列表。
Interface
,這正好是合同必須實施一些類實現。一個interface
本身不能實例化,它只有Abstraction
你不能在interface
的對象沒有在具體的類中實現它。
在java中您可以使用關鍵字implements
帶班,然後必須給實施由interface
定義的方法。您還可以使用惱人的類風格。但是如果任何一個類(包括這樣一個惱人的類也)實現一個接口,則必須提供實現接口中定義的所有方法的具體實現。爲此,您可以使用
public interface AnyInterface{
void anyMethodA(); // methods are public and abstract by default
void anyMethodB(); // see as the methods just have signature here, no body
}
現在你可以使用annoyonmous風格,如下使用花括號。
AnyInterface objectOfAnnoyomousClass = new AnyInterface(){
public void anyMethodA(){
// curly braces implies a method body, here you can have the method implemented
}
public void anyMethodB(){
}
};
java.util
類具有如ArrayList
,LinkedList
java.util.List
的implemetation。
private static List<Product> products = new LinkedList<Product>();
有很多可用於java集合的材料,包括非常好的java文檔。
** P.S。 static
實際上與您在代碼中顯示的編譯時問題無關。
列表是您可以將其更改爲新的ArrayList的接口() –
mir
1.它不會拋出異常它會給您一個編譯錯誤。 2.你不明白那個錯誤呢?你不能實例化抽象類或接口。但是,如果您實施所有抽象方法,您可以創建一個匿名子類。 –
你想做什麼? –