Interfacce:grado di utilizzare un tipo di intersezione quando la classe nozionale richiede la modifica accesso
interface PublicCloneable {
Object clone();
}
interface HasPosition {
// doesn't matter
}
tenta di utilizzare tipo intersezione:
@SuppressWarnings("unchecked")
<E extends PublicCloneable & HasPosition> E cloneAndIncrementPosition(E elem) {
final E clone = (E)elem.clone();
// rest omitted
}
tentativo per compilare con 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
Perché questo tipo di intersezione non è valido per javac?
È interessante notare che se si rimuove il limite superiore 'HasPosition' da' E', questo viene compilato. – rgettman
Questo compila su Eclipse ... –