java - .class 语法 MainActivity.class.getSimpleName();

标签 java android

我不断遇到这种语法,但一直找不到任何解释。

private static final String TAG = MainActivity.class.getSimpleName();
Log.i(TAG,”some log statement”);

class 关键字在 MainActivity.class.getSimpleName(); 中表示什么

此代码的外观和使用方式的全貌

public class MainActivity extends AppCompatActivity {
    // What does "class" signify in the following
    // MainActivity.class.getSimpleName();
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.i(TAG, "onCreate()");
    }
}

最佳答案

private static final String TAG = MainActivity.class.getSimpleName();

只是获取类MainActivity的“简单名称”,恰好是“MainActivity”。一个人可以写

private static final String TAG = "MainActivity";

同样如此,但是如果您稍后决定重命名该类,您还必须注意更改该字符串常量,因为如果您忘记了它,编译器将不会告诉您。

请注意,SomeClass.class 为您提供了一个对象,它描述了 本身,参见https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html .

因此,Someclass.class.getSimpleName() 除了日志记录之外很少有用。但是,如果您有一个对象,您可以通过调用 someObject.getClass() 找到有关其类型的信息。这为您提供了对象的 Class,然后您可以使用它来查询对象类型的属性,例如声明了哪些方法或完整的类名 (getCanonicalName()) 是什么。

在 Java 中,这种技术称为“反射”。阅读更多相关信息,例如here , 或 here .

也许还要注意,作为一名“普通”程序员,除了instanceof 运算符之外,您不需要了解太多关于反射的知识。然而,一些框架严重依赖反射。例如,Java Persistency API (JPA) 提供程序或依赖注入(inject) (DI) 框架;实际上,您通过在代码中放置注释来控制的大多数工具都需要反射才能在运行时查找和处理它们。

关于java - .class 语法 MainActivity.class.getSimpleName();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40286470/

相关文章:

android - 突出显示 TextView 中的文本

java 库 vs android 库

java - 需要创建tql查询

java - 在 Java 中使用流拆分单词列表

java - 如何以编程方式比较两个 java.io.File

android - 如何在 Android Studio 中为 Jetpack Compose UI 启用交互式预览按钮?

java - Hibernate session 使用什么模式

java - NetBeans 未生成 javaDoc 的 @author 和 @version?

android - 无法使用 Firebase Analytic 4.1.0 和 Admob 3.7.0 构建 Apk

java - Java 类或 Android Activity 中的 Save File 方法?