不同的术语用于提及java中的Interfaces特殊属性?

时间:2017-04-09 05:05:59

标签: java oop interface

我有一段时间在java工作。我知道他们有一些东西在java中被称为接口。在阅读它们的同时,我开始了解它们是标记界面。最近,当我开始阅读有关java 8的内容时,我开始了解其他接口的功能接口。

我只是想知道java中可用的不同类型的接口是什么?

2 个答案:

答案 0 :(得分:1)

Java语言规范本身并不定义术语标记接口,该术语由作者,开发人员和设计人员创造。一个常见问题是我们是否可以创建一个标记界面,答案是肯定的,原因如下:

我们无法创建类似于Serializable或Cloneable的标记界面,但我们可以通过在自定义标记界面周围编写额外代码来模拟功能。

空接口称为标记或标记接口。例如,Serializable,EventListener,Remote(java.rmi.Remote)是标记接口。这些接口中没有任何字段和方法。 在此处阅读更多内容:http://beginnersbook.com/2016/03/tag-or-marker-interfaces-in-java/

Functional Interface是Java 8中的新增功能,只有一个抽象方法的接口称为功能接口。阅读更多here

Java中没有其他类型的接口。

答案 1 :(得分:0)

每个人都没有特别的意义。

Marker interface有点“design pattern”,你将标签/标签附加到一组对象上,以表明它们有一些共同点,它们可以用于某种过程或操作。 Serializable是一个典型示例,标记对象可以序列化/反序列化。

另一方面,对于FunctionalInterface,它只是一个有限制的interface,只能有一个抽象方法,因此代表一个单一的函数契约。 Java 8为lambda expression添加functional programming,对于FP,我们需要经常来回传递function。假设我们有一个界面:

public interface StringTrasformer {
    String transform(Object obj);
}

传统上我们只能创建异步类的实例,如:

someObj.doTransform(new StringTransformer() {
    @Override
    public String transform(Object object) {
        return "result";
    }
});

但是只有一种方法可以实现,因此不需要使代码如此冗长,lambda expression它可以简短:

abc.doTransform(object -> "result");

注释FunctionalInterface用于编译器检查您注释的接口是否是有效接口。甚至功能界面适用于lambda expressionsmethod referencesconstructor references,但没有什么能阻止您以传统方式使用它。因为它本质上只是一个普通的界面。