这似乎很容易,但我现在几天都无法解决它......我一定是太笨了,所以我希望在这里得到一些帮助(虽然找不到答案)。
我只是想知道给定的类型是否实现了某个接口(interface)。例如,类型 X 是否实现了 Serialized
接口(interface)?它应该为 JComponent.class
等 X 类型提供 true
,为 Thread.class
提供 false。
或者,换句话说,类型 X 的对象可以转换为给定的接口(interface)吗?
我尝试了 instanceof
和 isAssignableFrom
,但似乎没有任何效果。
编辑:
好吧,也许我真的太愚蠢了:-(我已经尝试过以下方法:
此代码无法编译:
Type t1 = JComponent.class;
Type t2 = Thread.class;
Serializable.class.isAssignableFrom(t1);
Serializable.class.isAssignableFrom(t2);
此代码对于 t1 和 t2 均产生 true(当然,这是有道理的):
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);
作为实现接口(interface)的类型应该始终是一个类(对吗?),转换应该在所有情况下都有效...(编辑:有一个更简单的解决方案 - 我使用了检索构造函数参数的方法错误 (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
编辑
关于第二个问题。是的,您可以使用这两种技术来检查对象是否可以强制转换。
关于java - Java中如何判断一个Type是否实现了某个接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24547856/