"ClassA" sınıfının bir örneği olan ancak "Arabirim" arabirimini de uygulayan bir sınıfta bir değişkene ihtiyacım var.A sınıfını genişletmeli ve bazı arabirimleri uygulamalı olan üye değişkeni
Açıkçası bu bir veya kolayca diğeri için yapılabilir:
private ClassA mVariable;
private InterfaceI mVaraible;
ama nasıl zorlayabilir nesne hem Classa uzanır ve InterfaceB uygular? gibi bir şey:
private <? extends ClassA & InterfaceI> mVaraible;
ihtiyacım olanı ama sözdizimi hiçbir fikrim yok ya hatta mümkünse. Ben de bir alma ve kurma yöntemine gerekir, ama bu (sanırım?) Jenerik ile yapılabilir
bariz çözüm bu, ancak InterfaceI ve Sınıf A hem harici kitaplığındaki parçası olan
public class ClassB extends ClassA implements InterfaceI{
//whatever here
}
olduğunu libary'nin ClassA ve InterfaceI'yi genişleten sınıfları vardır ve bunları ClassB'yi genişletmek için düzenleyemem, bu nedenle bu çözüm işe yaramayacaktır.
Yapamazsınız, temelde. Değişkeni ayarlarken kontrol edebilir ve gerektiğinde yayınlayabilirsiniz ... ancak sınıfın genelini yapmadan değişkenin kendisinde bu kısıtlamayı ifade edemezsiniz. –
Birden fazla mirasa izin vermek için Java8'de bir sihir var ya da bir çeşit mix-in ... – Thufir
@Jon Skeet Değişkeni ayarlarken nasıl kontrol edersiniz? – jtedit