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.你不明白那个错误呢?你不能实例化抽象类或接口。但是,如果您实施所有抽象方法,您可以创建一个匿名子类。 –
你想做什么? –