Tip [] 'i kullanırsak, yalnızca Türü veya alt türlerini bunun içinde saklayabiliriz. Aynı ArrayList için de geçerli. Öyleyse neden diğerinin değil, neden homojen olduğu söylendi?Java dizilerinin homojen olduğu, ancak ArrayLists'in ne anlama geldiği nedir?
cevap
Diziler, eklenen öğenin türü üzerinde bir çalışma zamanı denetimi gerçekleştirir. Yani, aynı türde olmayan yeni bir öğe eklenirse, çalışma zamanında ArrayStoreException
atılır. Bu yüzden "evrimsel" olarak kabul edilirler.
Bu ArrayList
s (genel olarak List
ler) için geçerli değildir. Çalışma zamanında tür silme nedeniyle, herhangi bir nesneyi pratikte tutabilir. derler ve (düzgün jenerikleri kullanmaz gibi bir derleyici uyarı ile rağmen) sorunsuz çalışır Aşağıdakilerden aksine
Object[] array = new String[3];
array[0] = "a";
array[1] = 1; // throws java.lang.ArrayStoreException
: çalıştırırken
aşağıdaki bir istisna atar
ArrayList list = new ArrayList<String>();
list.add("a");
list.add(1); // OK
list.add(new Object()); // OK
jenerik bir doğru kullanımı ile
, tip ArrayList<String>
yerine ArrayList
yukarıdaki değişken list
ilan yani sorun derleme sırasında önlenir:
ArrayList<String> list = new ArrayList<String>();
list.add("a");
Method[] methods = List.class.getMethods();
for(Method m : methods) {
if(m.getName().equals("add")) {
m.invoke(list, 1);
break;
}
}
System.out.println(list.get(0));
System.out.println((Object) list.get(1));
Çıktı:
bir
ArrayList<String> list = new ArrayList<String>(); list.add("a"); list.add(1); // compilation error list.add(new Object()); // compilation error
Ama bir jenerik ilan listeyle, çalışma zamanında bir istisna olmadan bu işi gibi bir şey olabilir
Evet. Java
Arrays
homojendir, çünkü Java'daki herhangi bir diziyi bildirdiğinizde, type
numaralı telefonu bildirmeniz gerekir. örn: Eğer beyan dizide başka veri türü depolamak çalışırsanız
int arr[]; //type is int
String arr[]; //type is String
float arr[]; //type is float
şimdi, bir derleme zamanı hatası olacaktır. örn:
int arr=new int[5];
arr[0]="I am a String not int"; //compile time error
ama ArrayList
onlar [yaklaşık generics
konuşurken değilse] yerine herhangi bir spesifik data-type
arasında Objects
tutun ve java her şeydir çünkü doğrudan veya dolaylı miras, Collection
'in parçası olan Object
class
, bu yüzden run-time
run-time
üzerinde olacak vermeyecektir size compile-time error,
yazın.
örn: Biz ArrayList al
herhangi veri türü tanımlı değil çünkü
ArrayList al=new ArrayList();//type is Object
al.add("I am a String"); //Bacause String class in inherited from Object Class
al.add(1);//the int 1 will first autobox into Integer class then stored in al ArrayList.Now bacause Integer class is also inherited from Object class,it will*/ allow you to store
al.add(UserDefinedClass); //because every User defined class is also inherited from Object class,so it will also allow you.
Şimdi, fark ettiniz, ama yine de biz farklı tip değerlerini saklamak gibidir: bunu biliyorum neden ArrayList
Mağazalar Object
değil belirli bir veri tipi Böylece homojen değil heterojendirler.
Sana kim söyledi ArrayLists inhomojen? Jenerikleri geçmediğin sürece, tam olarak diziler kadar homojen olurlar. (Eğer * siz * jenerikleri atlarsanız *, o zaman muhtemelen 'Object [] 'ile karşılaştırmalısınız.) – user2357112
Bunun cevabın olmasını isterim. – totoro
Herhangi bir dizinin her öğesinin aynı ilkel tür veya aynı referans türü olması gerekir. Bir ArrayList öğesinin her öğesi aynı referans türü olmalıdır. –