数据类toString,等等是否由proguard优化?

时间:2018-01-29 02:02:13

标签: kotlin proguard

Kotlin有这个data class非常方便,比如提供自动toStringequal等。但是如果我们不使用这些功能,它们会被proguard优化吗? / p>

我在问,因为我想知道我们是否应谨慎使用data class(例如我们不使用toStringequal等情况,我们不应该使用数据class,而是普通类,即使它们是模型类..)

1 个答案:

答案 0 :(得分:1)

  

我问,因为我想知道我们是否应谨慎使用数据类

覆盖Object方法的公共方法(例如equalshashCodetoString)在缩小期间始终保留;安全地移除它们是不可能的。这是因为JVM和一些系统类(例如HashMap)可以在内部调用对象上的那些方法,而Proguard不能对JVM和系统类的内部进行假设。

其他重写基类方法的公共方法以及实现抽象类/接口所需的方法也从未优化过。理论上它应该可以剥离它们,但Proguard目前(从版本5 *开始)无法做到这一点。

AFAIK,Kotlin数据类中的一些自动生成的方法(即component*()copy()方法)不会覆盖任何基本方法, - 它们只是由编译器根据它们使用合同。如果没有使用它们,那么在收缩期间可以删除这些方法。如果未使用,也可以删除自动生成的构造函数。

TL; DR :您可以安全地使用Proguard处理数据类,唯一需要注意的是equalshashCodetoString始终保持,甚至如果未使用。