是否有可能拥有内部类的常量? (JAVA)

时间:2012-03-19 04:33:24

标签: java android inner-classes

例如(使用android)如果我想声明一个Camera.Size类的常量,我没有明显的方法这样做。我试过了:

private static final Camera.Size CAMERA_SIZE = Camera.new Camera.Size(640, 480);

显然这不起作用,因为您需要有一个相机类的实例来调用'new',如下所示:

Camera mCamera = Camera.open();
Camera.Size size = mCamera.new Size(640, 480);

但是在创建常量之前我不能这样做。有没有办法解决这个问题,或者只是不可能做到这一点?

4 个答案:

答案 0 :(得分:2)

Camera mCamera = Camera.open();
private final Camera.Size size = mCamera.new Size(640, 480);

答案 1 :(得分:1)

 public class Camera
 {
       public static final Camera.Size DEFAULT_SIZE = new Camera.Size(640, 480);
 }

您可以访问常量: Camera.DEFAULT_SIZE

答案 2 :(得分:1)

我认为你需要这样做:

private static final Camera.Size SIZE;
static {
    Camera mCamera = Camera.open();
    SIZE = mCamera.new Camera.Size(640, 480);
}

或......

private static final Camera.Size SIZE =
    (Camera.open()).new Camera.Size(640, 480);

然而,这一切似乎都有些不确定。绑定到SIZE的对象将绑定到无法访问的Camera实例。

我怀疑Camera.Size确实应该是static班级...考虑到你在这里使用它的方式。

public class Camera {
    public static class Size { ... }
    ...
    public static final Size SIZE = new Size(...);
    ...
}

答案 3 :(得分:1)

你做不到。

Size是Camera的非静态内部类。你只能在封闭类Camera中创建一个Size;你不能构造一个新的Camera.Size。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/android/hardware/Camera.java#Camera.Size

基于此,我会说这个API写得不正确。构造函数应该是私有的,或pkg私有,以明确表示您无法实例化此类。

你没有说你是如何使用它的,但看起来这是一个从Camera内部的各种方法返回的对象。我没有看到它传递到任何方法的地方。为什么你需要构建它?