繁体   English   中英

一类类实例实现

[英]One-liner class instance implementation

我需要获取正在实现某个接口的实例

是否可以创建单线类实例实现?

在Java 8中,如果接口是功能接口(恰好是一种抽象方法,请参见下文),则可以通过lambda表达式或在简单情况下通过方法引用进行定义:

LAMBDA:

Runnable runnable = () -> System.out.println("I am a runnable");

方法参考:

Predicate<Character> uppercase = Character::isUpperCase;

注意:功能接口不需要使用@FunctionalInterface进行注释,但是如果接口没有正好一个抽象(非default ,非static ,非private ,则将其作为@FunctionalInterface进行注释是编译时错误。 )方法(因此,注释的使用方式类似于@Override )。

看到:


更新对评论的回答:

是的,您可以定义一个lambda并将其与oneliner一起使用,但是如果上下文不清楚,则需要显式转换:

// 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));

有时是可能的。 例如:

List<T> list = ...
Collections.sort(list, (t1, t2) -> compareOperation(t1,t2));

functional interface Comparator<T>是仅包含一个抽象方法的接口。 参见docs.oracle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM