gpt4 book ai didi

java - Java 中的 Kotlin 内部类公开可见

转载 作者:搜寻专家 更新时间:2023-11-01 01:31:47 24 4
gpt4 key购买 nike

我正在开发 Android crypto library在 Kotlin 。我有几个 internal 类,它们在 Java 应用程序中公开可见。找到this在文档中。

internal declarations become public in Java. Members of internal classes go through name mangling, to make it harder to accidentally use them from Java and to allow overloading for members with the same signature that don't see each other according to Kotlin rules;

有办法解决这个问题吗?

最佳答案

我看过你所有的internal classes都是关于 encrypt & decrypt .

你可以很容易地通过定义一个顶层函数并将其标记为@JvmSynthetic,然后生成ECryptSymmetricDecrypt。和 ECryptSymmetricEncrypt将类设置为private 以防止 Java 客户端访问您的内部类,例如:

// define this top-level function in your ECryptSymmetricEncrypt.kt

@JvmSynthetic internal fun <T> encrypt(
input:T, password: String, cipher:Cihper,
erl: ECryptResultListener, outputFile:File,
getKey:(String,ByteArray)->SecretKeySpec){

ECryptSymmetricEncrypt(input, password, cipher,
{ pass, salt -> getKey(pass, salt) }, erl, outputFile)
}

但是,它解决了你的问题,但我仍然想说你的代码可以进一步分解成小块。比如加解密算法有很多重复,也许你可以申请Template Method Pattern在您的加密库中并引入接口(interface)以显式创建您的库并将 Cipher 操作隐藏在实现类下。理想情况下,客户端代码无法通过EncryptDecrypt 接口(interface)看到任何java.security.* 类。例如:

interface Encrypt{
// v--- don't include the infrastructure class here,e.g:`Keys`,`Cipher`
fun encode(...args)
}

interface Decrypt{
// v--- don't include the infrastructure class here,e.g:`Keys`,`Cipher`
fun decode(...args)
}

AND 创建实例并在 init block here 中计算结果是一件坏事.

AND 您可以使用 Factory Method Pattern避免在 ECryptSymmetricDecrypt 中进行类型检查和 ECryptSymmetricEncrypt类。

关于java - Java 中的 Kotlin 内部类公开可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45393423/

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