为什么android中的R类不是静态的?

时间:2017-05-16 05:17:11

标签: android

为什么android中的R类不是静态的?当它包含所有静态内容时。

public final class R {
//static content
}

2 个答案:

答案 0 :(得分:1)

R.java是动态生成的类,在构建过程中创建,用于动态识别所有资产(从字符串到android小部件到布局),用于Android应用程序中的java类。请注意,这个R.java是特定于Android的(虽然您可以将其复制到其他平台,非常方便),因此它与Java语言结构没有太大关系。

android.R.java不仅仅是存储XML ID的地方。它还包含对资源的访问 - 例如drawable,布局,字符串,数组,以及您可以在资源中声明的任何内容。

我个人认为使用Eclipse时它很有用。我只需输入findViewById(R.id。并且Eclipse将显示一个工具提示,其中包含可供选择的选项列表。

然而,在平台级别,我会说硬编码的id变量有助于防止在使用字符串识别资源时出现错误 - 在编程时(或在编译期间,而不是在运行时)可以调试。

答案 1 :(得分:1)

根据Java语言策略,顶级公共类不能是静态的。当你深入研究静态类的使用时,你会发现它用于创建独立的内部类,它不包含外部类的匿名引用。因此,类之前静态关键字的目的和用途是完全不同的。

非静态内部课程

class A
{
   int var1;
   class B{
     int calc(){
       // can access A.var1 directly
      }
   }
}

静态内部课程

class A
{
   int var1;
   static class B{
     int calc(){
       // cannot access A.var1 directly, need object to be passed
      }
   }
}