Возможно ли иметь константы внутреннего класса?(Джава) - PullRequest
2 голосов
/ 19 марта 2012

Например (с использованием 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 ]

2 голосов
/ 19 марта 2012
Camera mCamera = Camera.open();
private final Camera.Size size = mCamera.new Size(640, 480);
1 голос
/ 19 марта 2012

вы не можете этого сделать.

Размер - это нестатический внутренний класс Camera.вы можете создать Размер только внутри класса Camera;исходя из этого, вы не можете создать новую 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 private, чтобы было ясно, что вы не можете создать экземпляр этого класса.

вы не говорите, как пытаетесь его использовать, но похоже, что это объект, возвращаемыйразличные методы внутри камеры.я не вижу, где это когда-либо передается в любой метод.зачем вам его строить?

1 голос
/ 19 марта 2012

Я думаю, вам нужно сделать это:

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(...);
    ...
}
1 голос
/ 19 марта 2012
 public class Camera
 {
       public static final Camera.Size DEFAULT_SIZE = new Camera.Size(640, 480);
 }

Вы можете получить доступ к константе как: Camera.DEFAULT_SIZE

...