Her birinde oluşturduğum sistemde bulunan bir türü temsil eden bir Sınıflar dizisi oluşturmak istiyorum. İlgili tüm sınıflar ortak bir süper sınıfın alt sınıflarıdır. Bu yüzden yapmak istiyorum:Jenerikleri bir dizi Sınıf ile nasıl kullanırım?
Class<? extends SuperClass>[] availableTypes = { SubClass1.class, SubClass2.class };
Bu bana hata veriyor: Ben sağ taraftaki dizinin oluşturulmasını nitelemek çalışırsanız
Cannot create a generic array of Class<? extends SuperClass>.
Ben aynı mesajı almak başlatma:
:Class<? extends SuperClass>[] availableTypes = Class<? extends SuperClass>[] { SubClass1.class, SubClass2.class };
Ben jenerik nitelikleri ortadan eğer derlemek için kodu alabilirsiniz 210
Ancak, sonra da şu genel uyarıları alıyorum:
Sınıf bir türdür. Jenerik tip Sınıfına yapılan referanslar parametrelendirilmelidir.
deniyorum; Deniyorum! :) Ayrıca, bu noktada, bu bir uyarıya sebep olmasa bile, tanımlamaya çalıştığım arabirimin bir parçasını kaybediyorum. Sadece bir dizi keyfi sınıf döndürmek istemiyorum; Belirli bir SuperClass'ın tüm alt sınıfları olan bir dizi dersi geri vermek istiyorum!
Eclipse, generics bildirimlerini düzeltmek için hangi parametrelerin kullanılacağını bulmak için oldukça güçlü araçlara sahiptir, ancak bu durumda, Class ile uğraşırken yaptığınız gibi düşmektedir. Sunulan "Genel Türlü Argümanlar" prosedürü, kodu değiştirmez ve uyarıyı bırakmaz.
yerine Bir Koleksiyon kullanarak bu geçici bir çözüm başardı:List<Class<? extends SuperClass>> availableTypes = new List<Class<? extends SuperClass>>();
Ama diziler ile bunu yapmanın doğru yolu nedir?
Kovaryansı! Kötü söz dedin! –