gpt4 book ai didi

使用带有泛型类型接口(interface)的 Java 库时的 Scala 编译问题

转载 作者:行者123 更新时间:2023-12-02 10:54:14 25 4
gpt4 key购买 nike

在 Scala 项目中,我使用 Java livrary (bouncycaSTLe)。

使用需要实现泛型类型的对象的方法时,我遇到了编译问题。

这是Java中的接口(interface):

public interface Selector<T> extends Cloneable
{
boolean match(T obj);
Object clone();
}

这是一段无法编译的代码:
def verify(data: File): Boolean = {
val signedData = new CMSSignedData(new CMSProcessableFile(data), Base64.decode(this.value))
val certStore = signedData.getCertificates
val signers = signedData.getSignerInfos.getSigners
val signer = signers.iterator.next
val certs = certStore.getMatches(signer.getSID)
val cert = certs.iterator.next.asInstanceOf[X509CertificateHolder]
signer.verify(new JcaSimpleSignerInfoVerifierBuilder().setProvider("BC").build(cert))
}

当我编译代码时,我收到以下错误:
[error]  found   : org.bouncycastle.cms.SignerId
[error] required: org.bouncycastle.util.Selector[?0]
[error] val certs = certStore.getMatches(signer.getSID)

我试过类型转换,但我没有编译。

库勒请你帮忙?

问候,

最佳答案

如果你看https://www.bouncycastle.org/docs/pkixdocs1.5on/org/bouncycastle/cms/CMSSignedData.html , getCertificates返回原始 Store对象而不是 Store<Something> .一般来说,Scala 不支持使用原始类型(它们仅存在于 Java 中以与 Java-5 之前的代码互操作)。它被记录为

Return any X.509 certificate objects in this SignedData structure as a Store of X509CertificateHolder objects.



所以你可以试试
val certStore = signedData.getCertificates.asInstanceOf[Store[X509CertificateHolder]]

你还需要在任何其他地方进行类型转换 StoreSelector被退回。

关于使用带有泛型类型接口(interface)的 Java 库时的 Scala 编译问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38803369/

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