数据类toString,等得到优化的proguard?

Kotlin有这样一个data class ,它提供了像提供自动toString ,等等方便的function。但是如果我们不使用这些函数,它们会被proguard优化掉吗?

我问,因为我想知道如果我们应该谨慎使用data class (例如,我们不使用toString ,等等,我们不应该使用数据类,而是普通的类,即使他们是模型类.. )

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

重写Object的方法(例如equalshashCodetoString )的公共方法总是在收缩过程中保存; 这是不可能的,安全地删除它们。 这是因为JVM和一些系统类(如HashMap )可能会在你的对象内部调用这些方法,Proguard不能对JVM和系统类的内部做出假设。

其他的公有方法,重写基类方法,以及实现抽象类/接口所需的方法也永远不会被优化。 理论上可以将它们剥离,但目前的Proguard(版本5. *)不能这样做。

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


TL; DR :您可以安全地使用Proguard处理数据类,唯一需要注意的是,即使未使用, hashCodetoString也始终保持不变。