我需要获取一个实现特定接口(interface)的实例
是否可以创建一个单行类实例实现?
最佳答案
在 Java 8 中,如果接口(interface)是函数式接口(interface)(确切地说是一个抽象方法,请参见下文),您可以通过 lambda 表达式来定义它,或者在简单的情况下通过方法引用来定义它:
lambda :
Runnable runnable = () -> System.out.println("I am a runnable");
方法引用:
Predicate<Character> uppercase = Character::isUpperCase;
注意:函数式接口(interface)不需要使用 @FunctionalInterface
注解,但如果不使用 @FunctionalInterface
注解接口(interface),则会出现编译时错误t 只有一个抽象(非 default
、非 static
、非 private
)方法(因此该注释的用途与 @Override
类似)。
参见:
-
@FunctionalInterface
java文档 - Lambda expressions (Java教程)
- Method references (Java教程)
- Functional interfaces (Java语言规范)
- Method reference expressions (Java语言规范)
更新对评论的回答:
是的,您可以定义并使用带有 oneliner 的 lambda,但是如果上下文不清楚,则需要显式转换:
// cast required
System.out.println(((Predicate<Character>) Character::isUpperCase).test('A'));
// no cast required
Arrays.asList("foo","bar").forEach(System.out::println);
Arrays.asList(1,2).forEach(i -> System.out.println(i*2));
关于java - 单行类实例实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37545877/