der diese Klasse Struktur Lassen Sie haben:Generics Ausgabe: clone() versuchen, schwächere Privilegien Zugriff zuweisen
public interface TypeIdentifiable {}
public interface TypeCloneable extends Cloneable {
public Object clone() throws CloneNotSupportedException;
}
public class Foo implements TypeCloneable, TypeIdentifiable {
@Override
public Object clone() throws CloneNotSupportedException {
// ...
return null;
}
}
public abstract class AbstractClass<T extends TypeCloneable & TypeIdentifiable> {
public void foo(T element) throws Exception {
TypeCloneable cloned = (TypeCloneable) element.clone();
System.out.println(cloned);
}
}
ich dieses Übersetzungsfehler haben (obwohl die IDE, IntelliJ in meinem Fall nicht in der Lage ist, den Fehler zu zeigen, während
Codierung)Error:(4, 37) java: clone() in java.lang.Object cannot implement clone() in foo.TypeCloneable attempting to assign weaker access privileges; was public
ich weiß, dass der Compiler clone()
Methode von Object
statt TypeCloneable
, zu nennen versucht, aber ich verstehe nicht, warum. Ich habe es auch versucht, Casting TypeCloneable
(ich legte den Compiler würde wissen, welche clone()
Methode Aufruf in diesem Fall, aber das gleiche Problem).
public void foo(T element) throws Exception {
TypeCloneable typeCloneable = (TypeCloneable) element;
TypeCloneable cloned = (TypeCloneable) typeCloneable.clone();
}
Ich bin ein bisschen verwirrt ... Kann ich hier etwas tun Klon zu zwingen, callling() von TypeCloneable?
Danke für die hellp
Wenn ich die JLS richtig zu verstehen, sollte dies kompilieren . Ich denke, es ist ein Fehler. http://stackoverflow.com/questions/33023332/why-doesnt-this-java-program-compile –
Also ja ... es scheint ein Fehler zu sein. Ich habe diese Frage nicht gefunden. Vielen Dank! – troig