我不断遇到这种语法,但一直找不到任何解释。
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/