[Javalist] instanceof subtype probléma

Gábor Garami gabor.garami at hron.me
2013. Feb. 15., P, 11:01:59 CET


Ne felejtsd el, hogy pl. a javax.persistence osztalyai is kerik az
osztalyt, mint parametert - noha az a getClass() metodussal
kitalalhato lenne - talan nem veletlen.

Garami Gábor
E-mail: gabor.garami at hron.me
Tel: +36 20 235 9621
MSN: hrgy at vipmail.hu
Skype: hron84


2013/2/15 Keresztes Jozsef <jkeresztes at vati.hu>:
> Igen ez a külön Class<T> lenne a másik megoldás, de én úgy szeretném
> hogy ne lenne még egy ilyen paraméter is, hiszen az információ már benne van abban az egy paraméterben is.
> Esetleg elképzelhető hogy Predicate-nek nem interface-nek hanem abstract osztálynak kéne
> lennie és így egy előre megírt metódusa visszaadná a Class<T> -t ?
> Aki pedig ezt a Predicate-t leszármaztatja annak továbbra is csak az abstract match()-et kell megírnia ?
>
> Joe
>
> -----Original Message-----
> From: Margaritisz Oresztesz [mailto:maoreszt at gmail.com]
> Sent: Friday, February 15, 2013 10:09 AM
> To: javalist at lists.javaforum.hu
> Subject: Re: [Javalist] instanceof subtype probléma
>
> Hi!
>
> Igy elsore szerintem parameternek atadhatod a Class<T> -t es azt
> hasznalhatod arra hogy ellenorizd hogy egy instance castolhato -e az
> adott type-ra, az isInstance() fuggvennyel.
>
> public <T> List<T> query(Class<T> clazz, Predicate<T> predicate) {
>
>    for (Object object: objects) {
>         if (clazz.isInstance(object) {
>             T t = (T)object;
>             predicate.match(t);
>         }
>    }
>
> }
>
> Oresztesz
>
> On 02/15/2013 09:57 AM, Keresztes Jozsef wrote:
>> Sziasztok !
>>
>> A problémám a következő:
>> Van egy interface-em:
>>
>> public interface Predicate<T> {
>>    public boolean match(T candidate);
>> }
>>
>> És egy másik oszály query() metódusa pedig vár egy ilyen Predicate objektumot.
>>
>> public <T> List<T> query(Predicate<T> predicate) {
>>    for (Object object: objects) {
>>      T t = (T)object;              // itt nincs hiba
>>      predicate.match(t);    // itt ClassCastException jöhet
>>    }
>>    ...
>> }
>>
>> Ebben a másik osztályban van egy rakás Object, és szeretném meghívni a Predicate match() metódusát,
>> de csak azokkal az objektumokkal amelyek megfelelnek T-nek !
>> Persze rögtön az instanceof-ra gondolunk de azt nem lehet használni a subtype-ra.
>> Ráadásul a "T t = (T)object;" sem ad hibát még futásidőben sem pedig az objektum nem felel meg T-nek.
>> A futásidejű  ClassCastException csak akkor jön ha a match() meghívódik.
>> Szóval hogy lehetne megvizsgálni hogy egy objektum megfelel-e T típusnak és már a match()-nek
>> át se adjam ?
>> A primítív megoldás az lehet hogy igenis minden objektumot átadok a match()-nek
>> és lekezelem egy try-blokkban a ClassCastException-t. Nincs jobb ?
>>
>> Joe
>>
>>
>>
>>
>> _______________________________________________
>> Javalist mailing list
>> Javalist at lists.javaforum.hu
>> http://lists.javaforum.hu/mailman/listinfo/javalist
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist
>
>
> _______________________________________________
> Javalist mailing list
> Javalist at lists.javaforum.hu
> http://lists.javaforum.hu/mailman/listinfo/javalist


További információk a(z) Javalist levelezőlistáról