【发布时间】:2017-10-17 05:19:56
【问题描述】:
我很困惑……
我有一个直接实现接口的类:
public class Device implements AutocompleteResult
{...}
这证明我正在寻找正确的变量:
Object match = ...;
log.debug(match.getClass()); // Outputs 'Device'
log.debug(match.getClass().getInterfaces()[0]); // Outputs 'AutocompleteResult'
然而,当我尝试将类的实例强制转换为接口时:
AutocompleteResult result = (AutocompleteResult) match;
我得到一个 ClassCastException!
ClassCastException: Device cannot be cast to AutocompleteResult
另外,isAssignableFrom 返回 false,我不知道为什么:
log.debug(AutocompleteResult.class.isAssignableFrom(Device.class));
来自doc:
确定此 Class 对象所表示的类或接口是否与所表示的类或接口相同,或者是其超类或超接口通过指定的 Class 参数。
难道我不应该总是能够将一个对象转换为它的类实现的接口吗?
谢谢。
【问题讨论】:
-
是的,你应该! (你甚至不应该需要显式转换。)请发布一些演示问题的独立示例代码。
标签: java inheritance classcastexception