Konuyu görüntüle
IUCODERS FORUM > Programlama > JAVA > Template sınıfta instance of kullanımı
Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
26.09.2011-13:41 #76089
Merhabalar,

Template bir fonksiyonumda template tip T için instance of kullanmak istiyorum. Bunu yapmanın yolu varmıdır?

  public <Y extends Object> Y readFromSession(String key) {
        synchronized (THREAD_LOCK) {
            ConcurrentHashMap hashMap;
            Object temp = session.getAttribute(SESSION);
            if (temp != null && temp instanceof ConcurrentHashMap) {
                hashMap = (ConcurrentHashMap) temp;
            } else {
                return null;
            }
            temp = hashMap.get(key);
            if (temp == null) {
                return null;
            }else if (temp instanceof Y){ // HATA
                return (Y) temp;
            } else {
                throw new Exception();
            }
        }
    }


Verdiği hata : Required Class or Array. Found Y





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
fenerista


avatar
Istanbul
Kayıt: 27.11.2006
28.09.2011-07:56 #76110
Godoslama giriyorum :

Y sınıfını nerede tanımlı ki

Hızlıca şöyle bir şey buldum...

Classı birde Constructora versen olabilir..

Class Access<Y>{
private final Class<Y> classType;

     public Access(Class<Y> classtype) {
        this.classType = classtype;
     }
....

         if ( temp.getClass(). isAssignableFrom(this.classType)){ // HATA
              return (Y) temp;
          }


...

...


Böyle bir şey daha var.
Bu arada direk Y yi kullanamıyorsun sanırım. Sadece class isimini falan içerip, derleme anında Y ilgili sınıfla yer değiştiriliyor olmalı.

  if ( this.classType.isInstance(temp) ){ // HATA
              return (Y) temp;
          }






Oktay,
Thk you!





Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
28.09.2011-08:24 #76111
fenerista yazdi
 
Godoslama giriyorum :

Y sınıfını nerede tanımlı ki


<Y extends Object> Y

Y sınıf zaten sorun o biggrin Üstteki gibi tanımlı





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
fenerista


avatar
Istanbul
Kayıt: 27.11.2006
28.09.2011-08:51 #76112
extreme yazdi
 
fenerista yazdi
 
Godoslama giriyorum :

Y sınıfını nerede tanımlı ki


<Y extends Object> Y

Y sınıf zaten sorun o biggrin Üstteki gibi tanımlı


Tamam fonsiyonda ama orda bi tanım yok :) Class tanımından mı geliyor nedir diye soracaktım gerçi başka bir yeden gelebilir mi bilmiyom şuan :)

Class dan geliyorsa: Editledim mesajı, herhalde işini görür.





Oktay,
Thk you!





Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
28.09.2011-10:09 #76113
fenerista yazdi
 
extreme yazdi
 
fenerista yazdi
 
Godoslama giriyorum :

Y sınıfını nerede tanımlı ki


<Y extends Object> Y

Y sınıf zaten sorun o biggrin Üstteki gibi tanımlı


Tamam fonsiyonda ama orda bi tanım yok :) Class tanımından mı geliyor nedir diye soracaktım gerçi başka bir yeden gelebilir mi bilmiyom şuan :)

Class dan geliyorsa: Editledim mesajı, herhalde işini görür.


Sınıftan gelmiyor o. Fonksyon tek başına template gibi. Javanın harikalarıbiggrin





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
fenerista


avatar
Istanbul
Kayıt: 27.11.2006
28.09.2011-10:12 #76114
Bi şekilde Y sınıfı belli olmalı hacı :) fonksiyon Y classının ne olduğunu bilmeli sonuçta
Yoksa her türlü hata verir:)





Oktay,
Thk you!





Yazar
greenrock


avatar
istanbul
Kayıt: 18.08.2008
28.09.2011-13:59 #76115
Class cls=Class.forName("Y");
if(cls.isInstance(new Y()))
{
............
}

ile deneyebilirsin işe yararmı denemedim ama belki olur:)
forName için Tam class Package vermen gerekebilir.






Yazar
neurorebel


avatar

Kayıt: 15.08.2007
28.09.2011-15:45 #76116
şöyle bişe buldum merak edip

http://javanotepad.blogspot.com/2007/09/instanceof-doesnt-work-with-generics.html

çözersen yaz buraya :)





Do weird and difficult things.

Yazar
muamma


avatar

Kayıt: 19.11.2006
28.09.2011-17:49 #76117
http://javanotepad.blogspot.com/2007/09/instanceof-doesnt-work-with-generics.html





Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
28.09.2011-17:50 #76118
Malesef bunların hiç birisi çözüm değil. JDK7 ile de denedim ama bi fark yok. Sanırım imkansız beat up





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
fenerista


avatar
Istanbul
Kayıt: 27.11.2006
28.09.2011-20:00 #76119
Sınıf belli değil nasıl çalışacak o :) ,

burak istediğin şeyin mantığını anlatsan ne için kullanacaksın bunu bir de ilişkili olan diğer kodları da koysan belki bulunur.





Oktay,
Thk you!





Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
28.09.2011-21:26 #76120
fenerista yazdi
 
Sınıf belli değil nasıl çalışacak o :) ,

burak istediğin şeyin mantığını anlatsan ne için kullanacaksın bunu bir de ilişkili olan diğer kodları da koysan belki bulunur.


İstediğim şey basit. Bir nesnenin T sınıfından üretilmiş olup olmadığını anlamak istiyorum. Ama Class<T> gibi bir parametre almak istemiyorum nerd





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
neurorebel


avatar

Kayıt: 15.08.2007
28.09.2011-23:09 #76121
C++ clown





Do weird and difficult things.

Yazar
fenerista


avatar
Istanbul
Kayıt: 27.11.2006
29.09.2011-08:34 #76123
extreme yazdi
 
fenerista yazdi
 
Sınıf belli değil nasıl çalışacak o :) ,

burak istediğin şeyin mantığını anlatsan ne için kullanacaksın bunu bir de ilişkili olan diğer kodları da koysan belki bulunur.


İstediğim şey basit. Bir nesnenin T sınıfından üretilmiş olup olmadığını anlamak istiyorum. Ama Class<T> gibi bir parametre almak istemiyorum nerd


ama T sınıfının ne olduğu bilgisi nerden gelecek T sınıfı belli olmazsa belli olamayan bir sınıfı kontrol etmeyeceğiz herhalde :) Ya sınıf belli olmalı yada şöyle bir kontrol mi istiyorsun "şu sınıfı türeten bir sınıf" ın nesnes mi bu nesne...





Oktay,
Thk you!





Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
29.09.2011-19:46 #76132
fenerista yazdi
 

ama T sınıfının ne olduğu bilgisi nerden gelecek T sınıfı belli olmazsa belli olamayan bir sınıfı kontrol etmeyeceğiz herhalde :) Ya sınıf belli olmalı yada şöyle bir kontrol mi istiyorsun "şu sınıfı türeten bir sınıf" ın nesnes mi bu nesne...


Runtime esnasında T tanımlı sonuçta bence tipi vermesi lazımnerd





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





1 2
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb