java - 单行类实例实现

标签 java java-8

我需要获取一个实现特定接口(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 类似)。

参见:

<小时/>

更新对评论的回答:

是的,您可以定义并使用带有 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/

相关文章:

java - Java中如何销毁线程

java - LocalDate 没有构造函数...我们如何创建没有构造函数的类?

java - 如果数组中存在一组特定的数字,我该如何计数

java - 如何修复不明确的方法引用?

java - 按属性隔离列表

java - 如何在 Java 中明智地绕过 SSL 身份验证 URL 连接?

java - 共享按钮呈灰色且禁用

java - double 不被减去

Java:使用新的模式字母扩展 SimpleDateFormat

java - java中的比较器链