[Javalist] instanceof subtype probléma

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


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






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