类中的Java静态列表实现

时间:2017-04-18 14:48:39

标签: java constructor

public class Shop
{
    private static List<Product> products = new List<Product>(){};
}

代码抛出异常:不是抽象的,不会覆盖List中的抽象方法subList(int,int)

3 个答案:

答案 0 :(得分:2)

您无法实例化List,它只是一个界面。因此,实例化它的实现,例如一个ArrayList:

public class Shop
{
    private static List<Product> products = new ArrayList<Product>();
}

答案 1 :(得分:1)

正如其他答案中所提到的,java.lang.Listinterface。我想再补充一点。 Listinterface表示它定义了必要的合同,任何类都必须尊重并履行限定作为列表。这样一个类的用户可以确定所遵循的合同,因此不必担心内部源代码,他们可以确保它遵循作为列表的所有标准预定义规则。

只需合同的{p> 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的实现,例如ArrayListLinkedList

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>(){};