Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How should I cast for Java generic with multiple bounds?

Tags:

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);
  }
}

}

like image 665
pvgoddijn Avatar asked Nov 25 '08 17:11

pvgoddijn


People also ask

Can a generic class have multiple generic parameters Java?

A Generic class can have muliple type parameters.

Can generics take multiple 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.

Can a parameterized type have several bounds?

A type parameter can have multiple bounds.

How are bounds used with generics?

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.


1 Answers

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);
like image 140
Ron C Avatar answered Oct 29 '22 02:10

Ron C