【发布时间】:2019-10-12 14:54:49
【问题描述】:
我有一个通用接口
{
void evaluate( TYPE... things );
}
我有一个带有签名的通用方法
<TYPE> void genericmethod( INTERFACE<TYPE> interfase, TYPE thing )
{
//the following line throws the ClassCastException
interfase.evaluate( thing );
}
PCard 是我项目中的一个名称。
所以最后的调用是
INTERFACE<PCard> interfase = new WorkingImplementation<PCard>();
PCard pcard = new PCard();
这似乎在泛型方法中抛出 ClassCastException,当它尝试调用将单个 pcard 转换为 varargs 数组时。
genericmethod( interfase, pcard );
没有调用泛型方法,直接调用接口,问题就解决了。
interfase.evaluate( pcard );
什么导致异常(内部)? (我个人猜测是java不堪重负)
异常消息:
java.lang.ClassCastException: 类 [Ljava.lang.Object;不能转换为类 [Llib.cardgame.CG$PCard; ([Ljava.lang.Object; 在加载器“bootstrap”的模块 java.base 中;[Llib.cardgame.CG$PCard; 在加载器“app”的未命名模块中)
【问题讨论】:
-
你能加一个minimal reproducible example吗? (最好是没有类的叫
INTERFACE... shudder ...)