How do I determine whether Java generics implement specific interfaces?
•
Java
How do I determine whether Java generics implement specific interfaces?
I tried several different methods, but they all led to the error of "unable to find symbol... Variable t"
First attempt
public abstract class AbstractClass<T> {
public void doFoo() {
if (T instanceof SomeInterface){
// do stuff
}
}
}
Second attempt
public abstract class AbstractClass<T> {
public void doFoo() {
if (SomeInterface.class.isAssignableFrom(T)) {
// do stuff
}
}
}
Solution
You can’t.
Solution 1
Add a constructor using the class of the object
public abstract class AbstractClass<T> {
private Class<T> clazz;
public AbstractClass(Class<T> clazz) {
this.clazz = clazz;
}
public void doFoo() {
if (clazz instanceof SomeInterface){
// do stuff
}
}
}
Solution 2
Add constraints to type T and use t to extend someinterface, limiting type T to subtypes of someinterface
public abstract class AbstractClass<T extends SomeInterface> {
public void doFoo() {
// do stuff
}
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码
