[Javalist] instanceof subtype probléma

Keresztes Jozsef jkeresztes at vati.hu
2013. Feb. 15., P, 10:15:32 CET


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




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