我读过一个人不应该使用TAG
private static final String TAG = ThisClassName.class.getSimpleName();
反而
private static final String TAG = "MCLSN";
因为ProGuard会正确地创建错误和/或没有混淆代码。这些是有道理的吗?
参考文献:
http://www.drewhannay.com/2016/02/android-logcat-tag-best-practices.html https://blog.mindorks.com/applying-proguard-in-an-android-application
老实说,这是一个偏好问题,但我更喜欢简单的String选项。
使用getSimpleName()
选项的唯一好处是因为它支持重构。因此,只有在更改类的名称(应该很少发生)或者复制/粘贴文件以用作模板时,它才有用。
所以,如果你经常这样做,我会明白为什么你更喜欢第一种选择。它只是使得不必手动更改TAG变得更容易。
我最初也使用getSimpleName()
作为TAG,直到最近我遇到了一个小问题。
使用MVVM架构时,每个View实际上只有一个ViewModel,所以我创建了一个ViewModelFactory,它为View创建并返回正确的ViewModel。由于它是唯一的,我决定使用TAG作为我需要的ViewModel的标识符。
因此,通过TAG上的简单Switch-case语句,我应该能够获得正确的ViewModel。但是,当您使用getSimpleName()
时,您根本无法使用TAG作为案例表达式。我收到了错误:Constant Expression Required
。
因此,如果您只计划在某些情况下使用TAG,例如Logcat,那么只需使用getSimpleName()
即可。但是,如果您计划将它们用作特定类组的唯一类标识符,那么您将需要纯String选项。