2011-08-29 5 views
0

아래 코드를 컴파일하려고하면 "생성자 호출은 생성자의 첫 번째 문이어야합니다"라는 오류 메시지가 나타납니다. 메신저에서 오류가 발생했습니다. this(text, style, font, colour, backgroundBitmap);싱글 톤 클래스가 컴파일되지 않습니다.

Im은 생성자 내에 없습니다. 메신저는 초기화 메소드에서이를 호출하려고합니다.

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; 
    } 


} 
+0

getSingletonObject가 호출 될 때 초기화가 수행됨을 알았습니다. 답변을 주셔서 감사합니다 –

+0

구문 오류입니다. – umbr

답변

4

다른 곳에서 생성자 (또는 super 생성자)를 호출 할 수는 없지만 생성자에서는 자체 호출 할 수 없습니다. 즉, 생성자가 아닌 다른 메서드에서 this()을 호출 할 수 없습니다.

4

은 내부 당신이 ... 나 슈퍼 (생성자 만 생성자에서 호출 할 수 있습니다 ....이 (호출 할 수 없습니다 초기화합니다.

가 지금처럼 코드를 살펴보면, 당신은하지 않습니다 초기화 메서드가 전혀 필요하지 않습니다.

4

오류를 던지는 줄이 생성자 내에 없다는 것이 문제입니다. this()은 생성자에서만 호출 할 수 있습니다. 개체가 이미 생성자가 호출되면 생성자를 호출 할 수 없습니다 Java가 생성자 이외의 생성자 호출을 허용하지 않습니다.

initialize 메서드가 여기에 표시되지 않은 일부 생성자에 의해 호출되고 있다고 가정합니다. initialize 메서드가 모든 생성자를 호출하는 것을 고려하면 initialize을 호출하는 모든 곳에서 호출하지 마십시오.

+0

예, 그냥 getSingletonObject를 호출하십시오. –

2

this() 구문은 다른 생성자 을 생성자에서 호출하는 데에만 사용됩니다. initialise 메서드는 이고 생성자는입니다.

나는 당신이 정말로 여기에 뭘 원하는지 잘 모르겠지만, 당신은 중 하나 원하는

  • 전화 super.initialise() 대신 this() 또는
  • 당신의 initialise 방법으로 다른 초기화 작업을 수행하는

initialise 메서드가 private이고 해당 코드에서 아무 것도 호출하지 않으므로 쓸모가 없습니다 (w ontt는 이제까지 불린다).