[英]How to find out if a Type implements an interface in Java?
这似乎很容易,但是我几天来都无法解决它……我一定太愚蠢了,所以我希望在这里得到一些帮助(虽然找不到答案)。
我只是想知道给定的Type是否实现某些接口。 例如,类型X是否实现Serializable
接口? 对于X类型(例如JComponent.class
,它应该为true
;对于Thread.class
,它应该为false。
或者换句话说,是否可以将类型X的对象强制转换为给定的接口?
我尝试了instanceof
和isAssignableFrom
,但是似乎没有任何效果。
编辑:
好吧,也许我真的太愚蠢了:-(我尝试了以下方法:
此代码无法编译:
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对象的列表,这完全没有问题。)
感谢您的快速帮助!
卢卡斯
不, instanceof
和isAssignablefrom()
工作。 请尝试以下示例:
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.