Java'da her bir döngü içinde jenerikler kullanırken garip bir derleyici hatası var. Bu bir Java derleyici hatası mı, yoksa gerçekten bir şey mi eksik?Neden Java Derleyicisi foreach kullanarak ham türden şikayet ediyor?
public class Generics<T extends Object> {
public Generics(T myObject){
// I didn't really need myObject
}
public List<String> getList(){
List<String> list = new ArrayList<String>();
list.add("w00t StackOverflow");
return list;
}
public static void main(String...a){
Generics generics = new Generics(new Object());
for(String s : generics.getList()){
System.out.println(s);
}
}
}
derleyici için-her doğrultusunda şikayet edilir: Burada
benim bütün sınıftır "Tür uyumsuzluğu String eleman tipi Nesne dan dönüştürmek olamaz"public static void main(String...a){
Generics<?> generics = new Generics(new Object());
for(String s : generics.getList()){
System.out.println(s);
}
}
Ben getList()
kullanım Generics'i yapar biliyorum ama ben tamamen ilgisiz bir yol olduğunu düşündüğüm bunları kullanır: Bu ince değişiklik yaparsanız
, bu derler. T türünden bir şey üzerinde yineleme yapmaya çalışıyorsam ve getList()
bir List<T>
veya bir şey döndürdüyse bunu anlayabiliyordum, ama durum bu değil. getList()
'un dönüş türünün kesinlikle T ile ilgisi olmamalı ve Generics objem için ham tip kullanıp kullanmadığımı ummamalı mıyım? Bunlar tamamen alakasız mı olmalı yoksa gerçekten bir şey mi eksik? kodu da derler
Not ben ilk yanı eşdeğer olmalıydı düşünülen bu, eğer:
public static void main(String...a){
Generics generics = new Generics(new Object());
List<String> list = generics.getList();
for(String s : list){
System.out.println(s);
}
}
nasıl görüneceğini olduğunu' olarak başlatılamadı. Sınıfınızın genel bir sürümünü oluşturmuyorsunuz, ham türü yapıyorsunuz. Bu bizi niçin genel olarak sınıfın genel olduğunu sorusuna getiriyor? T'yi kullandığınız tek yer yapıcıdır ve bu referansı kullanmazsınız. –
unholysampler
Eskiden Nesne'yi kullanıyorum çünkü bir örnek için bir şeye ihtiyacım vardı. Gerçek kod açık bir şekilde başka bir şeydir ve T'yi kullanır ... sadece T'yi 'getList()' ile ilgisiz bir şekilde kullanır. –
sorgunuzla ilgisi yok, fakat yapıcıyı Generics cls) yapalım, böylece bu Generics sınıfını oluşturmak için T türünde bir nesneyi başlatmanız gerekmez. –
MeBigFatGuy