Я видел все ваши внутренние классы относятся к зашифровать и расшифровать.
вы можете легко сделать это, определив функцию верхнего уровня и пометив ее как @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)
}
Тем не менее, это решило вашу проблему, но я все же хочу сказать, что ваш код может разбиваться на мелкие кусочки, как и дальше. например, алгоритм шифрования и дешифрования имеет много дубликатов, возможно, вы можете применить Шаблон метода шаблона в своем зашифровать библиотеку и ввести интерфейсы, чтобы сделать вашу библиотеку явной и скрыть операции Cipher
в классах реализации. В идеале клиентский код не может видеть никакие java.security.*
классы через Encrypt
или Decrypt
интерфейсы. Например:
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)
}
И плохо, что вы создаете экземпляр и вычисляете результат в init
блоке здесь.
И вы можете использовать шаблон метода Factory, чтобы избежать проверки типов как в ECryptSymmetricDecrypt и ECryptSymmetricEncrypt.
person
holi-java
schedule
29.07.2017
@PublishedApi
поддерживает только предупреждения, но клиентский код может заставить вызывать ваши внутренние классы. - person holi-java   schedule 29.07.2017private
- person priyank   schedule 29.07.2017internal
предназначены только для внутреннего использования, что отлично работает в приложении Kotlin. Там нечего выставлять. Проблема заключается в совместимости от Kotlin до Java, а не в дизайне, который я считаю. - person priyank   schedule 29.07.2017private
- это путь, но проблема в том, что класс очень большой, и создание его внутреннимclass
еще больше снизит читаемостьclass
. - person priyank   schedule 29.07.2017as Int
. - person priyank   schedule 29.07.2017internal object
с@JvmSynthetic internal fun
, что делает свое дело. Проверьте здесь github.com/ryan652/EasyCrypt/blob/master/easycrypt/src/main/ - person priyank   schedule 15.05.2018