2013-11-09 62 views
2

您好我正在从Android API看这个语法,发现它有点奇怪。Java类声明 - 具有'。'和静态类

java.lang.Object 
    ↳ android.graphics.BitmapFactory.Options 

公共静态类 BitmapFactory.Options

我从来没有见过一类以 ''在它的中间。他们为什么不直接叫班'BitmapFactoryOptions'?

然后,因为我看到了一本书

final BitmapFactory.Options options = new BitmapFactory.Options(); 

BitmapFactory是静态但我们正在创造它的一个实例验证码我被搞糊涂了更?

回答

2

他们没有用一个点命名类(这将是非法的)。他们所做的只是添加一个名为Options的静态内部类--类的成员类。

这是当类或接口有问题时,它们在外部类中隐藏类的常用方法,它只能在其外部类的上下文中解释。

当然,您提出的解决方案(命名类BitmapFactoryOptions)也是完全有效的。但是,它给人一种错觉,认为这个班级可以独立使用。

也许最常用的例子是Map.Entry<K,V>接口:map条目只有在它们周围有地图时才有意义,所以嵌套非常有用。

+0

哦,谢谢你,现在有道理。我知道嵌套类是什么,所以这对我来说看起来有点奇怪。我认为这是一个顶级静态课程,我知道这是非法的。 – jimbo123

+0

@ jimbo123补充一下看看代码http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.3_r2.1/android/graphics/ BitmapFactory.java/ – Raghunandan

3

添加到@dasblinkenlight答案,代码可能看起来像:

public class BitmapFactory { 
    public static class Options { 
    } 
} 

而这确实是这样的,看到source code for BitmapFactory

0

就像任何其他类变量和类方法一样,在类中也可以有类。以下示例显示了使用相同语法访问的所有三种类成员。

public class Person{ 

    public static long totalPopulation; 
    public static void calculateAge(Date dob){ 
    } 
    public static class Address{ 
    } 
} 

所有这些都将以相同的方式访问。即,

Person.totalPopulation = 700_000_0000L; 
Person.calculateAge(person.getDOB()); 
Person.Address address = new Person.Address();