有一个我正在与之交互的库导出的接口。为了实现MCVE,我们假设它是一个名为Marker
的空接口。
标记器具有名为MarkerImpl
的该接口的实现,该接口还包含名为removeMarker
的方法-但该方法不在接口上,并且MarkerImpl
isn不会公开显示-我无法导入它以将marker
投向它。
我想在我的removeMarker
实例上调用Marker
方法,所以我尝试这样做:
interface RemovableMarker extends Marker {
void removeMarker();
}
然后这样称呼它:
RemovableMarker removable = (RemovableMarker) marker;
removable.removeMarker();
但是出现以下错误:
Marker
无法转换为RemovableMarker
我怎么打marker.removeMarker
?
答案 0 :(得分:1)
通过将其转换为具有removeMarker()
方法的{strong>实际类型:MarkerImpl
。
Java的结构类型不像TypeScript。如果一个类没有实现接口,那么即使它具有带有相同签名的方法,也不会实现它。 MarkerImpl
未实现您的接口RemovableMarker
,因此MarkerImpl
的实例不是RemovableMarker
,并且不能转换为RemovableMarker
。
答案 1 :(得分:0)
我已经用getDeclaredMethod
Method removeMarker = marker.getClass().getDeclaredMethod("removeMarker");
removeMarker.setAccessible(true);
removeMarker.invoke(marker);