新的stream()
默认方法Collection
返回 a Stream<E>
,也是 Java 8 中的一种新类型。如果遗留代码包含stream()
具有相同签名的方法,但返回其他内容,则会导致编译失败,从而导致返回类型冲突。
只要不重新编译,遗留代码就会继续运行。
首先,在 1.7 中,设置以下内容:
public interface MyCollection {
public void foo();
}
public class Legacy implements MyCollection {
@Override
public void foo() {
System.out.println("foo");
}
public void stream() {
System.out.println("Legacy");
}
}
public class Main {
public static void main(String args[]) {
Legacy l = new Legacy();
l.foo();
l.stream();
}
}
使用-source 1.7 -target 1.7
,编译并运行:
$ javac -target 1.7 -source 1.7 Legacy.java MyCollection.java Main.java
$ java Main
foo
Legacy
现在在 1.8 中,我们将流方法添加到MyCollection
.
public interface MyCollection
{
public void foo();
public default Stream<String> stream() {
return null;
}
}
MyCollection
我们只在 1.8 中编译。
$ javac MyCollection.java
$ java Main
foo
Legacy
当然我们不能再重新编译Legacy.java
了。
$ javac Legacy.java
Legacy.java:11: error: stream() in Legacy cannot implement stream() in MyCollection
public void stream()
^
return type void is not compatible with Stream<String>
1 error