Is it possible to cast an object in Java to a combined generic type?
I have a method like:
public static <T extends Foo & Bar> void doSomething(T object) {
//do stuff
}
Calling this method is no problem if I have a class that implements both interfaces (Foo & Bar).
The problem is when I need to call this method the object I need to pass to it is received as java.lang.Object
and I need to cast it to make the compiler happy. But I can't figure out how to make this cast.
edit:
The problem lies in a function like this:
public void problemFunction (Object o) {
if ( o instanceof Foo && o instanceof Bar) {
doSomething((Problematic cast) o);
}
}
}
A Generic class can have muliple type parameters.
Multiple parametersYou can also use more than one type parameter in generics in Java, you just need to pass specify another type parameter in the angle brackets separated by comma.
A type parameter can have multiple bounds.
Whenever you want to restrict the type parameter to subtypes of a particular class you can use the bounded type parameter. If you just specify a type (class) as bounded parameter, only sub types of that particular class are accepted by the current generic class. These are known as bounded-types in generics in Java.
Java 8 introduces the possibility of casting with additional bounds. You can cast an Object
as a class
with multiple interfaces
(or just as multiple interfaces
).
So this:
doSomething((Problematic cast) o);
simply becomes to this:
doSomething((Foo & Bar) o);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With