如何创建接口对象?

时间:2013-08-26 09:11:38

标签: java jooq

我有Field interface

如何创建此接口的对象?

8 个答案:

答案 0 :(得分:2)

查看所有已知的实施类:CustomField

这可能是您正在寻找的课程

Field<T> myField = new CustomField<T>(String name, DataType<T> type);

对于字段列表(数组):

ArrayList<Field<T>> arr = new ArrayList<Field<T>>();
arr.add(myField);

如果您不熟悉泛型,T只表示您要使用的任何引用类型(Class)

对于简单的数组类型(不是ArrayList),它将是:

Field<T>[] arr = new Field<T>()[size];
arr[0] = myField;

考虑使用ArrayList或其他一些Collection,没有理由使用带有引用变量的普通旧数组,如你的情况。

答案 1 :(得分:1)

我们不能instatiate interface(没有构造函数)......

您可能希望阅读有关"anonymous inner classes"主题的Java语言规范(或您最喜欢的Java书籍)。

答案 2 :(得分:1)

好吧,可能有Factory个类来创建一些Field接口实现的实例。

无论如何,API说Field接口有一个实现 - &gt; CustomField已保护构造函数。它还说你必须实现两种方法:void toSQL(RenderContext context)void bind(BindContext context)

public static class MyField<T> extends CustomField<T> {
    private final String table;
    private final String field;

    MyField(String table, String field, DataType<T> type) {
      super(table + "." + field, type);

      this.table = table;
      this.field = field;
    }

    @Override
    public void toSQL(RenderContext context) {
        context.literal(table).sql(".").literal(field);
    }

    @Override
    public void bind(BindContext context) throws DataAccessException {}
}

然后你可以使用

Field<Object> xxx = new MyField<Object>("table", "field",dataTypeInstance<Object>);

答案 3 :(得分:0)

你做不到。 interface包含unimplemented methods,创建一个对象是没有意义的 - 你需要创建一个类implement接口,然后实例化该类。

答案 4 :(得分:0)

我坚信,我们不能instantiate interface

您可以使用interface的任何实现,也可以使用anonymous inner class

Ex from docs

 btn.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.println("Hello World!");
            }
        });

答案 5 :(得分:0)

您无法创建Interface的对象。您可以创建Interface类型的引用,并且可以包含实现interface的任何类的对象。

因此您需要有一个实现Field接口的类,并假设您将其命名为FieldImpl。然后你可以像这样在Field的引用中保存FiledImpl的对象:

Field f = new FieldImpl();

答案 6 :(得分:0)

单向或反向,您需要一个实现Field的类。一种方法是使用匿名类:

Field myField = new Field() {
  // implementation of Field's methods.
}

或者,您可以编写一个实现Field的命名类,并创建该类的实例。

答案 7 :(得分:0)

根据interface definition

  

接口不能实例化,而是实现。
  实现接口的类必须实现接口中描述的所有方法,或者是抽象类   Java中的对象引用可以指定为接口类型;在这种情况下,它们必须为null,或者绑定到实现接口的对象。