Kotlin有这个data class
非常方便,比如提供自动toString
,equal
等。但是如果我们不使用这些功能,它们会被proguard优化吗? / p>
我在问,因为我想知道我们是否应谨慎使用data class
(例如我们不使用toString
,equal
等情况,我们不应该使用数据class,而是普通类,即使它们是模型类..)
答案 0 :(得分:1)
我问,因为我想知道我们是否应谨慎使用数据类
覆盖Object
方法的公共方法(例如equals
,hashCode
,toString
)在缩小期间始终保留;安全地移除它们是不可能的。这是因为JVM和一些系统类(例如HashMap
)可以在内部调用对象上的那些方法,而Proguard不能对JVM和系统类的内部进行假设。
其他重写基类方法的公共方法以及实现抽象类/接口所需的方法也从未优化过。理论上它应该可以剥离它们,但Proguard目前(从版本5 *开始)无法做到这一点。
AFAIK,Kotlin数据类中的一些自动生成的方法(即component*()
和copy()
方法)不会覆盖任何基本方法, - 它们只是由编译器根据它们使用合同。如果没有使用它们,那么在收缩期间可以删除这些方法。如果未使用,也可以删除自动生成的构造函数。
TL; DR :您可以安全地使用Proguard处理数据类,唯一需要注意的是equals
,hashCode
和toString
始终保持,甚至如果未使用。