Nasıl Java genel bir dizi oluşturmak için?
Java jenerik uygulanması nedeniyle, bu gibi bir kod olabilir mi:
public class GenSet<E> {
private E a[];
public GenSet() {
a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
}
}
Ne tür güvenlik korurken bu uygulayabilirim?
Böyle giderse Java forumlarında bir çözüm gördüm
import java.lang.reflect.Array;
class Stack<T> {
public Stack(Class<T> clazz, int capacity) {
array = (T[])Array.newInstance(clazz, capacity);
}
private final T[] array;
}
Ama ben gerçekten neler olup bittiğini anlamıyor. Herkes yardımcı olabilir?
CEVAP
Karşılığında bir soru sormak istiyorum: GenSet
"" veya""? denetlenmeyen kontrol edilir
Bu ne anlama geliyor?
Kontrol etti:güçlü yazarak.
GenSet
açıkça bilir ne tür nesneleri içerir (yani onun yapıcı olduğunu açıkça adında birClass<E>
değişken ve Yöntem atar bir özel durum olduğunda onlar geçirildi bağımsız olmayan tipE
.Collections.checkedCollection
bkz.->bu durumda, yazmalısın:
public class GenSet<E> { private E[] a; public GenSet(Class<E> c, int s) { // Use Array native method to create array // of a type only known at run time @SuppressWarnings("unchecked") final E[] a = (E[]) Array.newInstance(c, s); this.a = a; } E get(int i) { return a[i]; } }
Denetlenmeyen:zayıf yazmaya. Hiçbir tür denetlemesi aslında nesneleri değişken olarak geçirilen herhangi bir yapılır.
->bu durumda, yazmalısın
public class GenSet<E> { private Object[] a; public GenSet(int s) { a = new Object[s]; } E get(int i) { @SuppressWarnings("unchecked") final E e = (E) a[i]; return e; } }
Dizinin bileşen türü türü parametre: erasure olması gerektiğini unutmayın
public class GenSet<E extends Foo> { // E has an upper bound of Foo private Foo[] a; // E erases to Foo, so use Foo[] public GenSet(int s) { a = new Foo[s]; } ... }
Tüm bu sonuçlar bir bilinen ve kasıtlı zayıflık jenerik Java: oldu hayata kullanarak silme, yani "genel" sınıfları bilmiyorum ne tür bir argüman onlar oluşturulan çalışma zamanında, ve bu nedenle değil sağlamak tipi emniyet sürece bazı açık mekanizması (tip-kontrol) uygulanır.
Nasıl bir dosyanın içeriğini bir Java ...
Nasıl bir dosya oluşturmak ve Java ile...
Nasıl UML diyagramları (özellikle sıra...
Kolayca Ayarlamak için bir Dizi Dönüşt...
Nasıl iki mutlak yol (veya URL) Java g...