这似乎很容易,但我现在几天都无法解决它......我一定太傻了,所以我希望能在这里得到一些帮助(虽然找不到答案)
我只想知道给定的Type是否实现了某个接口。例如,类型X是否实现了Serializable
接口?它应该为类型X提供true
,如JComponent.class
,并为Thread.class
提供。
或者,换句话说,可以将类型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对象,并且根本没有问题。)
感谢您的快速帮助!
的Lukas
答案 0 :(得分:2)
不,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
修改
关于第二个问题。是的,您可以使用这两种技术来检查是否可以转换对象。
答案 1 :(得分:0)
object
instanceof
object_interface
将产生真实的