是否应该为TAG使用.class.getSimpleName()?

问题描述 投票:1回答:1

我读过一个人不应该使用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

android obfuscation
1个回答
3
投票

老实说,这是一个偏好问题,但我更喜欢简单的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选项。

© www.soinside.com 2019 - 2024. All rights reserved.