public class Shop
{
private static List<Product> products = new List<Product>(){};
}
代码抛出异常:不是抽象的,不会覆盖List中的抽象方法subList(int,int)
答案 0 :(得分:2)
您无法实例化List,它只是一个界面。因此,实例化它的实现,例如一个ArrayList:
public class Shop
{
private static List<Product> products = new ArrayList<Product>();
}
答案 1 :(得分:1)
正如其他答案中所提到的,java.lang.List
是interface
。我想再补充一点。 List
为interface
表示它定义了必要的合同,任何类都必须尊重并履行限定作为列表。这样一个类的用户可以确定所遵循的合同,因此不必担心内部源代码,他们可以确保它遵循作为列表的所有标准预定义规则。
Interface
需要实现的类 实现。 interface
本身无法实例化,只有Abstraction
您不能拥有interface
的对象而不在具体类中实现它。
在java中,您可以将关键字implements
与类一起使用,然后必须为interface
定义的方法提供实现。您还可以使用 annoyonmous class 样式。但是,如果实现接口的任何类(包括这样一个烦人的类),您必须提供接口中定义的所有方法的具体实现。为此你可以使用
public interface AnyInterface{
void anyMethodA(); // methods are public and abstract by default
void anyMethodB(); // see as the methods just have signature here, no body
}
现在你可以使用花括号来使用如下的烦人风格。
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
个类具有java.util.List
的实现,例如ArrayList
,LinkedList
。
private static List<Product> products = new LinkedList<Product>();
有很多可用于Java集合的资料,包括非常好的java文档。
** P.S。 static
实际上与您所显示的代码中的编译时间问题无关。
答案 2 :(得分:0)
List
是一个界面。您无法初始化接口的实例。您需要初始化一个实现List
的类,如ArrayList
。
private static List<Product> products = new ArrayList<Product>(){};