Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
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
Istanbul
Kayıt: 27.11.2006 |
|
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
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
fenerista yazdi | Godoslama giriyorum :
Y sınıfını nerede tanımlı ki |
<Y extends Object> Y
Y sınıf zaten sorun o Üstteki gibi tanımlı
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
fenerista
Istanbul
Kayıt: 27.11.2006 |
|
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 Ü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
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
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 Ü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ı
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
fenerista
Istanbul
Kayıt: 27.11.2006 |
|
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
istanbul
Kayıt: 18.08.2008 |
|
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
Kayıt: 15.08.2007 |
|
şö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
Kayıt: 19.11.2006 |
|
http://javanotepad.blogspot.com/2007/09/instanceof-doesnt-work-with-generics.html
|
|
Yazar |
|
extreme
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
Malesef bunların hiç birisi çözüm değil. JDK7 ile de denedim ama bi fark yok. Sanırım imkansız
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
fenerista
Istanbul
Kayıt: 27.11.2006 |
|
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
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
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
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
Yazar |
|
neurorebel
Kayıt: 15.08.2007 |
|
C++
Do weird and difficult things.
|
|
Yazar |
|
fenerista
Istanbul
Kayıt: 27.11.2006 |
|
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 |
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
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
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ım
The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | | | | | | | | | | |