Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
6
Cevap
920
Tıklama
0
Öne Çıkarma
Farklı Class daki Arraya Ulaşma
M
11 yıl
Yarbay

Hayir, arrayler static olmak zorunda degiller. Array'leri icinde tutan bir singleton class' i tanimlanir, onu cagiran fonksiyonlar da arraylere yine o class'in metodlari uzerinden ulasabilirler. Bu class'in tek gorevi programin geri kalaninda ulasilacak verileri guvenli bir sekilde tutmasi olacaktir. Ayrica bir tane class yazarken baska bir class okumaya calisiyorsa ( eger multithread bir uygulama ise ) yine hata alinir. Soyle bir kod ile temiz bir sekilde halledebilirsin:
 
public class DataHolder {

private static DataHolder instance;
private Integer[] integerArray;
private final Integer integerArrayLength = 10;

private DataHolder() {
integerArray = new Integer[integerArrayLength];
}

public static synchronized DataHolder getInstance() {
if (instance == null)
instance = new DataHolder();
return instance;
}

public Integer[] getIntegerArray() {
return integerArray;
}

public void setIntegerArray(Integer[] integerArray) {
this.integerArray = integerArray;
}

}


Bu sekilde ustteki dataHolder uzerinden herhangi bir class integerArrayine ulasabilir. Ornek:
 
public class A {


public void getArray(){
DataHolder dataHolder = DataHolder.getInstance();
Integer[] myArray = dataHolder.getIntegerArray();
}

}

public class B{


public void getFamousArray(){
DataHolder myDataHolder= DataHolder.getInstance();
Integer[] theArray= dataHolder.getIntegerArray();
}

}


Ancak ustteki kod tam anlamiya multithread dostu degil, ama o kadar ince bir tasarim da gerekmiyor sanirim : )


Bu mesaja 1 cevap geldi.
G
11 yıl
Yarbay

Ama nasıl çözüldü? Gidip static mi yaptın yoksa? Önüne gelen aynı şeyi söylüyor. Yahu veri static olduğu zaman o sınıfın sadece tek örneği çıkabilir. O durumda da "nesne" olmaz o, bildiğin fonksiyon tabanlı kod olur.

Adamlar nasıl yapmış diye merak edip sdk reference falan okusaydınız doğrusunu öğrenmiş olurdunuz.


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @yogilit
Y
11 yıl
Teğmen
Konu Sahibi

Merhaba arkadaşlar 1 den fazla classım var 1 formda veri girdiğim bir arraya başka bir gorumda nasıl ulaşailirim
bilgilerinizi arz ederim....

saygılar....

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



E
11 yıl
Teğmen

Arrayin public le beraber static olmasi ve tanimlanmasi gerekir.

Ornegin
public class Data
{
public static int[] notlar = new int[3];
}

public class A
{
public static void sayilariKaydet()
{
Data.notlar[0]= 90;
Data.notlar[1] = 78;
}
}


public class B
{
public void sayilariOku()
{
System.out.println("Not 1 : "+Data.notlar[1]);
}
}


Bu mesaja 1 cevap geldi.
E
11 yıl
Teğmen

quote:

Orijinalden alıntı: Mephalay

Hayir, arrayler static olmak zorunda degiller. Array'leri icinde tutan bir singleton class' i tanimlanir, onu cagiran fonksiyonlar da arraylere yine o class'in metodlari uzerinden ulasabilirler. Bu class'in tek gorevi programin geri kalaninda ulasilacak verileri guvenli bir sekilde tutmasi olacaktir. Ayrica bir tane class yazarken baska bir class okumaya calisiyorsa ( eger multithread bir uygulama ise ) yine hata alinir. Soyle bir kod ile temiz bir sekilde halledebilirsin:
 
public class DataHolder {

private static DataHolder instance;
private Integer[] integerArray;
private final Integer integerArrayLength = 10;

private DataHolder() {
integerArray = new Integer[integerArrayLength];
}

public static synchronized DataHolder getInstance() {
if (instance == null)
instance = new DataHolder();
return instance;
}

public Integer[] getIntegerArray() {
return integerArray;
}

public void setIntegerArray(Integer[] integerArray) {
this.integerArray = integerArray;
}

}


Bu sekilde ustteki dataHolder uzerinden herhangi bir class integerArrayine ulasabilir. Ornek:
 
public class A {


public void getArray(){
DataHolder dataHolder = DataHolder.getInstance();
Integer[] myArray = dataHolder.getIntegerArray();
}

}

public class B{


public void getFamousArray(){
DataHolder myDataHolder= DataHolder.getInstance();
Integer[] theArray= dataHolder.getIntegerArray();
}

}


Ancak ustteki kod tam anlamiya multithread dostu degil, ama o kadar ince bir tasarim da gerekmiyor sanirim : )

1 Form'dan diğerine veri taşımaya çalışan arkadaşa singleton, synchronized, multithread'ten falan girmişsin, iyi yapmişsin :)


Bu mesaja 1 cevap geldi.
Y
11 yıl
Teğmen
Konu Sahibi

TEŞEKKÜRLER DEĞERLİ HOCALARIM SORUN ÇÖZÜLDÜÜ



Y
11 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: elektro_gadget

Ama nasıl çözüldü? Gidip static mi yaptın yoksa? Önüne gelen aynı şeyi söylüyor. Yahu veri static olduğu zaman o sınıfın sadece tek örneği çıkabilir. O durumda da "nesne" olmaz o, bildiğin fonksiyon tabanlı kod olur.

Adamlar nasıl yapmış diye merak edip sdk reference falan okusaydınız doğrusunu öğrenmiş olurdunuz.

bütün programda kullanacağım 1 arraya ihtiyacım vardı public statik tanımladım

public class Arac{
String marka;
String model;
double deger;
int stok;
}


//-------------------------


public class Main {
public static Arac[] car = new Arac[1];
public static void main(String[] args) {

Ekran e = new Ekran();
e.setVisible(true);

}
}

//------------------------
JOptionPane.showMessageDialog(null, Main.car.length);
Main.car[Main.car.length - 1].marka = aracMarka.getText();
Main.car[Main.car.length - 1].model = aracModel.getText();
Main.car[Main.car.length - 1].deger = Double.parseDouble(aracDeger
.getText());
Main.car[Main.car.length - 1].stok = Integer.parseInt(aracStok
.getText());





< Bu mesaj bu kişi tarafından değiştirildi yogilit -- 5 Eylül 2014; 13:07:07 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.