[英]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
)。
看到:
@FunctionalInterface
javadocs 更新对评论的回答:
是的,您可以定义一个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.