我很困惑......
我有一个直接实现接口的类:
public class Device implements AutocompleteResult
{...}
Run Code Online (Sandbox Code Playgroud)
这证明我正在寻找正确的变量:
Object match = ...;
log.debug(match.getClass()); // Outputs 'Device'
log.debug(match.getClass().getInterfaces()[0]); // Outputs 'AutocompleteResult'
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试将类的实例强制转换为接口时:
AutocompleteResult result = (AutocompleteResult) match;
Run Code Online (Sandbox Code Playgroud)
我得到了ClassCastException!
ClassCastException: Device cannot be cast to AutocompleteResult
Run Code Online (Sandbox Code Playgroud)
此外,isAssignableFrom返回false,我不知道为什么:
log.debug(AutocompleteResult.class.isAssignableFrom(Device.class));
Run Code Online (Sandbox Code Playgroud)
来自文档:
确定是否类或由这类对象表示接口是任一相同,或是一个超类或的超接口,由指定的Class参数所表示的类或接口.
我不应该总是能够将对象强制转换为其类实现的接口吗?
谢谢.