为什么我不能将 Signature 投射到我自己的 class?

Why can I not cast Signature to my own class?

所以我实现了一个签名 class,最终派生自 SignatureSpi。在我的 class 中,我添加了一个 public 方法来利用写在 class 层次结构更高层的一些逻辑。有几个抽象层次;这并不重要,重要的是,下面的 classes 之一提供了我想从我的 class.

中调用的方法 A()

所以,我有:

Signature sig = Signature.getInstance(sigAlg, "provider");
sig.initSign(privKey);
sig.update(data);
byte[] signature = sig.sign();
byte[] plainSig = ((MySigProviderClass)(SignatureSpi)sig).ExtDecodeSignature(signature);

在 IDE (intellij) 中一切看起来都不错。

但是,当我尝试 运行 时,我得到 java.lang.ClassCastException: java.security.Signature$Delegate cannot be cast to com.company.my.provider.signature.MySigProviderClass。为什么?

我知道我可以从 A() 中提取代码并将其放置在其他地方...我希望简单地进行快速 n 肮脏的 hack 来访问它。

getInstance 方法不直接 return 您的签名 class,它 return 是一个代理对象,最终将所有调用委托给您的实现:

Returns a Signature object that implements the specified signature algorithm. [...] A new Signature object encapsulating the SignatureSpi implementation from the first Provider that supports the specified algorithm is returned.