faz:stanie używać typ skrzyżowania gdy hipotetyczna klasy wymaga modyfikacji Dostęp
interface PublicCloneable {
Object clone();
}
interface HasPosition {
// doesn't matter
}
próba wykorzystania typ skrzyżowania:
@SuppressWarnings("unchecked")
<E extends PublicCloneable & HasPosition> E cloneAndIncrementPosition(E elem) {
final E clone = (E)elem.clone();
// rest omitted
}
Próbowano opracować z javac 1.8.0_60
:
$ javac xx.java
xx.java:13: error: clone() in Object cannot implement clone() in PublicCloneable
<E extends PublicCloneable & HasPosition> E cloneAndIncrementPosition(E elem) {
^
attempting to assign weaker access privileges; was public
xx.java:14: error: clone() has protected access in Object
final E clone = (E)elem.clone();
^
2 errors
Dlaczego ten typ przecięcia jest nieprawidłowy dla javac?
Co ciekawe, jeśli usuniesz górną granicę 'HasPosition' z' E', to kompiluje. – rgettman
To kompiluje się na Eclipse ... –