Класс Singleton не компилируется - PullRequest
0 голосов
/ 29 августа 2011

Когда я пытаюсь скомпилировать приведенный ниже код, я получаю сообщение об ошибке «Вызов конструктора должен быть первым оператором в конструкторе».Я получаю сообщение об ошибке в строке this(text, style, font, colour, backgroundBitmap);

Я не в конструкторе, я просто пытаюсь вызвать его из метода инициализации.

public class TimerLabelFieldSingleton extends TimerLabelField{

    private TimerLabelFieldSingleton ref;

    private TimerLabelFieldSingleton(Object text, long style, Font font,
            int colour, Bitmap backgroundBitmap) {
        super(text, style, font, colour, backgroundBitmap);
    }

    private void initialise(Object text, long style, Font font,int colour, Bitmap backgroundBitmap){
        this(text, style, font, colour, backgroundBitmap);
    }

    public TimerLabelFieldSingleton getSingletonObject(Object text, long style, Font font,int colour, Bitmap backgroundBitmap){
        if(ref == null){
            ref = new TimerLabelFieldSingleton(text, style, font,colour, backgroundBitmap);
        }
        return ref;
    }


}

Ответы [ 4 ]

4 голосов
/ 29 августа 2011

Ваша проблема именно в том, что строка с ошибкой находится не в конструкторе.this() можно вызвать только из конструктора.Не имеет смысла вызывать конструктор после того, как объект уже создан, поэтому Java не допускает вызовы конструктора вне конструкторов.

Я предполагаю, что ваш initialize метод вызывается каким-то конструкторомэто не показано здесь.Учитывая, что метод initialize вызывает только конструктор, почему бы не сделать это из того места, где вы вызываете initialize?

4 голосов
/ 29 августа 2011

Запрещается вызывать конструктор (или super конструктор) из любого другого места, кроме самого конструктора.Другими словами, вы не можете вызвать this() из другого метода, кроме конструктора.

4 голосов
/ 29 августа 2011

Внутри инициализации вы не можете вызвать это (... или супер (.... Конструкторы могут быть вызваны только из конструкторов.

Глядя на ваш код таким, какой он есть сейчас, вам не нужен этот метод инициализации.

2 голосов
/ 29 августа 2011

Синтаксис this() используется только для вызова другого конструктора из конструктора . Ваш initialise метод не конструктор .

Я не уверен, что вы действительно хотите здесь делать, но вы либо хотите

  • звоните super.initialise() вместо this() или
  • выполнить другую инициализацию в вашем initialise методе

Также помните, что ваш initialise метод - private, и ничто в этом коде не вызывает его, поэтому он бесполезен (никогда не будет вызван).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...