单行类实例实现

时间:2016-05-31 12:31:43

标签: java java-8

我需要获得一个实现某个接口的实例

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

2 个答案:

答案 0 :(得分:6)

在Java 8中,如果接口是一个功能接口(恰好是一个抽象方法,见下文),您可以通过lambda表达式或在简单的情况下通过方法引用来定义它:

LAMBDA:

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

方法参考:

Predicate<Character> uppercase = Character::isUpperCase;

注意:功能接口不需要使用@FunctionalInterface进行注释,但如果接口没有恰好一个抽象,则将接口注释为@FunctionalInterface是一个编译时错误(非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));

答案 1 :(得分:0)

有时候是可能的。 例如:

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

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