通常在设计API时,我会遇到一个警告,指出一个接口(恰好包含一个抽象方法)"可以使用@ FunctionalInterface"进行注释。
通常会出现自定义侦听器(有点像ActionListener
),但也会出现这样的情况:
public interface CommunicatorEnumerator {
List<Communicator> enumerateCommunicators();
}
所有这些界面都有一个共同点,就是不排除某人将来会添加更多抽象方法。理想情况下,我希望阻止在lambda中使用这些接口。
让@SuppressWarnings("InterfaceMayBeAnnotatedFunctional")
不能阻止使用lambda。我想将它们标记为&#34;而不是功能界面&#34;。
那么为什么没有一个构造(它不必是一个注释)阻止lambda使用接口呢?
答案 0 :(得分:0)
这只是IDE的一个警告,您应该可以将其关闭或有选择地禁用它。
使用@FunctionalInterface不会阻止扩展。
@FunctionalInterface
public interface ISuper {
void methodOne();
}
public interface ISub extends ISuper {
void methodTwo();
}
public enum Sub implements ISub{
INSTANCE {
@Override
public void methodTwo() {
System.out.println("Wave Two");
}
@Override
public void methodOne() {
System.out.println("Wave One");
}
}
}
public class Main {
public static void main(String[] args) {
ISuper sup = () -> System.out.println("Hi");
sup.methodOne();
Sub.INSTANCE.methodOne();
Sub.INSTANCE.methodTwo();
ISub sub = new ISub() {
@Override
public void methodTwo() {
System.out.println("Bye");
}
@Override
public void methodOne() {
}
};
sub.methodTwo();
}
}
打印
Hi
Wave One
Wave Two
Bye
我会禁用不适用的警告,不用担心延长@FunctionalInterface