繁体   English   中英

如何确定Type是否在Java中实现接口?

[英]How to find out if a Type implements an interface in Java?

这似乎很容易,但是我几天来都无法解决它……我一定太愚蠢了,所以我希望在这里得到一些帮助(虽然找不到答案)。

我只是想知道给定的Type是否实现某些接口。 例如,类型X是否实现Serializable接口? 对于X类型(例如JComponent.class ,它应该为true ;对于Thread.class ,它应该为false。

或者换句话说,是否可以将类型X的对象强制转换为给定的接口?

我尝试了instanceofisAssignableFrom ,但是似乎没有任何效果。

编辑:

好吧,也许我真的太愚蠢了:-(我尝试了以下方法:

此代码无法编译:

    Type t1 = JComponent.class;
    Type t2 = Thread.class;
    Serializable.class.isAssignableFrom(t1);
    Serializable.class.isAssignableFrom(t2);

这段代码对于t1和t2都为真(当然这是有道理的):

    Type t1 = JComponent.class;
    Type t2 = Thread.class;
    Serializable.class.isAssignableFrom(t1.getClass());
    Serializable.class.isAssignableFrom(t2.getClass());

(并且instanceOf的类似操作也不起作用。)

但是,似乎起作用的是:

    Type t1 = JComponent.class;
    Type t2 = Thread.class;
    Serializable.class.isAssignableFrom((Class<?>) t1);
    Serializable.class.isAssignableFrom((Class<?>) t2);

由于实现接口的Type始终应该是Class(对吗?),所以强制转换应该在所有情况下都可以工作...( 编辑 :还有一个更简单的解决方案-我使用了错误的方法来获取构造函数参数(getGenericParameterTypes) ;仅使用getParameterTypes给出了Class对象而不是Type对象的列表,这完全没有问题。)

感谢您的快速帮助!

卢卡斯

不, instanceofisAssignablefrom()工作。 请尝试以下示例:

List<String> list = new ArrayList<>(); // it is serializable
System.out.println(list instanceof Serializable); // should print true
System.out.println(Serializable.class.isAssignableFrom(list.getClass())); // should print true too

编辑

关于第二个问题。 是的,您可以使用两种技术来检查是否可以投射对象。

object instanceof object_interface将产生true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM