Merabalar aşağıda belirttiğim kod blogunda bir kısıtlı jenerik sınıfım var.Sınıf içersinde birde statik method tanımladım.Genel kullanıma acık olması için static deklare ettim.Tabi statik bloktan field a erişmek için değişkenide static tanımladım.Tam da o satırda static tanımlama yapamayacağıma dair hata mesajı belirdi.

Demo.obj seklinde bir erişimin Demo sınıfının calısma zamanında barındırdığı tipin belli olmaması nedeniyle hatalıolacağını düşündüm Muhtemelen hata bu sebeptendi Ancak Demo<integer>.obj seklinde bir tanımlama olamazmı acaba? Bu koddaki diğer nokta da isEquals metodunda nesneadreslerini kıyasladığı için aynı sayılara eşit değil demesi Number sınıfının ShortValue DoubleValue gibi metodları var ancak jenerik olduğu için sınıfa hangi veri tipinin atanacağıda belli değil.

    package generics;

public class Demo <T extends Number>{

    private static T obj;

    public Demo() {

    }
    public Demo(T ob){

    }

    public static void main(String[] args) {
        Demo<Integer> demo = new Demo<Integer>(12);
        System.out.println(Demo.isEquals((12)));

    }

    public T getLocalob() {
        return obj;
    }

    public void setLocalob(T localob) {
        this.obj = localob;
    }

   public static <T> boolean isEquals(T number){
       return number == obj ? true :false;
   } 
}

soruldu: 31 Eki '12, 07:44

trueLife's gravatar image

trueLife
699182430
cevap kabul oranı: 10%

değiştirildi: 31 Eki '12, 16:02

CemIkta's gravatar image

CemIkta ♦
19.9k29125190

Ayrıca java ilginç bir nokta;

Integer sayi1= 10; Integer sayi2= 10; System.out.print(sayi1==sayi2); // true basıyor

Integer sayi1= new Integer(10); Integer sayi2= new Integer(10); System.out.print(sayi1==sayi2); // false basıyor

Demo<integer> demo = new Demo<integer>(12); //böyle bir tanımlama yaptığımızda ise 12 nin tipi ile ilgili olarak otomatik olarak 2. yaklaşım kabul ediliyor bu neden le yukardaki gibi isEquals metodu içersinde sorun cıkabiliyor.Bu sorundan kurtulmanın yolu nedir? Teşekkürler

(31 Eki '12, 07:50) trueLife trueLife's gravatar image

== referanslarin yerini kontroll eder. Yapman gereken islem: isEqual

(31 Eki '12, 09:28) mahmut_can ♦ mahmut_can's gravatar image

Sorunun cevabi cok basit:

demo.isEquals(12); --> yanlis
demo.isEquals("12"); --> dogru.

String li bir methoda int kabul edilemiyor.

Belki yapmak istedigin sudur:

public <T extends Number> void isEquals (T  number){

}
permanent link

cevaplandı: 31 Eki '12, 09:40

mahmut_can's gravatar image

mahmut_can ♦
2.9k62552
cevap kabul oranı: 67%

değiştirildi: 31 Eki '12, 09:49

Generic bir ortamda static bir method olupta instance varibale ye erismesi mümkün degil. Biri degerine zid düsüyor.

Neden diyeceksin? Generic olan siniflar daha tam belli olmayan objectler icindir. Objectler belli oldugu zaman T nin yerini doldulur.

Static ise object ile ilgisi olmayan methodlardir. Sinifa aittir.

Ancak söyle bir sey mümkündür, cünkü a olusan bir objenin instancidir.

public static <T> void nop(T a) {
    System.out.println(a);
}
permanent link

cevaplandı: 31 Eki '12, 08:09

mahmut_can's gravatar image

mahmut_can ♦
2.9k62552
cevap kabul oranı: 67%

değiştirildi: 31 Eki '12, 08:18

cevabınız için teşekkürler.static durumunu anladım.

(31 Eki '12, 09:26) trueLife trueLife's gravatar image

peki sayıların eşitliklerini kontrol etmek için bi yöntem varmı acaba?

(31 Eki '12, 09:31) trueLife trueLife's gravatar image
package generics;

1-public class Demo {
2-   public static void main(String[] args) {
3-      Demo demo = new Demo();
4-     demo.isEquals(12);
5-  }
6-   public <T extends Number> void isEquals (String  number){
7-  
8- } 
9- }

bu kod 4. satırda boyle bir metod bulunamadı hatası veriyor.metod hem statik değil hemde janerik olarak number bekliyor olmasına rağmen String kabul ediyor ve hiç bir sekilde number kabul etmiyor peki o zaman
<"T extends Number"> diye belirtilebiliyor olmasının baska bir kullanımı varmı?

(31 Eki '12, 09:36) trueLife trueLife's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×1,079
×13
×3

Soruldu: 31 Eki '12, 07:44

Görüntüleme: 845 kez

Son güncelleme: 31 Eki '12, 16:02

powered by BitNami OSQA