gpt4 book ai didi

java - 无法转换为已实现的接口(interface)

转载 作者:IT老高 更新时间:2023-10-28 20:48:01 24 4
gpt4 key购买 nike

我很困惑……

我有一个直接实现接口(interface)的类:

public class Device implements AutocompleteResult
{...}

这证明我正在寻找正确的变量:

Object match = ...;
log.debug(match.getClass()); // Outputs 'Device'
log.debug(match.getClass().getInterfaces()[0]); // Outputs 'AutocompleteResult'

然而,当我尝试将类的实例强制转换为接口(interface)时:

AutocompleteResult result = (AutocompleteResult) match;

我得到一个 ClassCastException!

ClassCastException: Device cannot be cast to AutocompleteResult

另外,isAssignableFrom 返回 false,我不知道为什么:

log.debug(AutocompleteResult.class.isAssignableFrom(Device.class));

来自 doc :

Determines if the class or interface represented by this Class object is either the same as, or is a superclass or superinterface of, the class or interface represented by the specified Class parameter.

难道我不应该总是能够将一个对象转换为它的类实现的接口(interface)吗?

谢谢。

最佳答案

如果两个不同的类加载器加载一个名为 AutocompleteResult 的类,就会发生这种情况。

这两个类随后被视为完全不同的类,即使它们具有相同的包和名称(甚至是实现/字段/方法)。

造成这种情况的一个常见原因是,如果您使用某种插件系统并且您的基类和插件类提供相同的类。

要检查此问题,请打印 Class.getClassLoader() 返回的值在两个有问题的类上(即由 Device AutocompleteResult.class 的结果实现的接口(interface)类。

关于java - 无法转换为已实现的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8035877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com