Re: what do you mean I can't (someObj instanceof MyGenericType) ?
Sideswipe <christian.bongiorno@gmail.com> wrote:
if(T instanceof arg) ... // compile error
Right. T doesn't exist at runtime, only at compile.
if(T.class.isAssignableFrom(arg.getClass())) // compile error
Here too. The type parameter T can't be used except for compile-time checking
and shortcuts.
public interface I {
public void method1(Object arg);
}
public class C<T> implements I {
public void method1(Object arg);
// If arg is of type T, use it, otherwise ignore it
// Note: I can't use T.class to compare because T doesn't exist at runtime
There is no runtime type T. In other words, you cannot make a runtime
choice based on whether an object is type T.
T var = null;
try {
var = (T)arg;
This will generate a warning "[unchecked] unchecked cast" so you know that the
cast isn't actually doing anything.
}
catch (ClassCastException e) {
return;
}
... some more code here
}
}
Is this better?
Clearer, but you're trying to do something that type erasure prevents you from
doing. Depending on your object model, you might prefer to have two different
methods rather than (or in addition to, if you have cases where it's needed)
generics.
Have multiple methods method1(Foo arg), method1(Bar arg), which each behave
correctly for their arg.
--
Mark Rafn dagon@dagon.net <http://www.dagon.net/>