Bu konuyla ilgili farklı sorular gördüm, ancak bu konuyu çok kafa karıştırıcı buluyorum. O olduğu içinJava Generics isim çatışması, yöntem doğru şekilde geçersiz kılındı
yapmak istediğim tüm, bir arabirim uygulayan bir soyut sınıf var ve sabit sınıf getKommune()
ve setKommune(Kommune kommune)
, ancak diğer yöntem uygulaması gerekmektedir, böylece bu soyut sınıf uzanan bir sınıf var olduğunu soyut sınıf.
Aşağıdaki arabirim var.
public interface KommuneFilter {
<E extends AbstractKommune<?>> void addKommuneFromCurrentUser(E e);
Kommune getKommune();
void setKommune(Kommune kommune);
}
Ve bu Özet sınıf
public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter {
@PrePersist
void addKommuneFromCurrentUser(E e) {
Kommune k = e.getKommune();
}
}
Ve ben, ben
Name clash: The method of has the same erasure of type but does not override it
olsun Ancak bu
public class Person extends AbstractKommune<Person> {
private Kommune kommune;
public void setKommune(Kommune kommune) {this.kommune=kommune;}
public Kommune getKommune() {return kommune;}
}
gibi kullanmak istiyorum Neden doğru geçersiz değil?
public interface KommuneFilter<E extends AbstractKommune<?>> {
public void addKommuneFromCurrentUser(E e);
}
public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter<E>
public class Person extends AbstractKommune<Person>
Teşekkür ederim, bu işe yarar görünüyordu. Ancak, belki de bu çözümün neden işe yarayıp yaramadığını anlamış olabilirsiniz. –
@Shervin: çünkü orijinal tasarımınızda, arabirim tarafından belirtilen yöntem genel bir yöntemdir ve soyut sınıfınızın '@ Geçersiz Kıl 'girişimi bir değil. – polygenelubricants