How do I determine whether Java generics implement specific interfaces?

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
分享
二维码
< <上一篇
下一篇>>