2012-11-13 3 views
0

Android에서보기와 다소 비슷한 추상 클래스가 있습니다. 다른 수업을하기 위해 수업을 확장하는 수업을 많이 만듭니다. 이제는 모든 클래스가 동일한 Paints를 공유하여 색상이 일치되도록하는 것이 좋습니다.언제/어떻게 추상 클래스의 정적 멤버를 초기화합니까? (지연로드 없음)

내 아이디어

  • 패스 매 생성자에 어떤 상황이나 windowmetrics 것입니다,하지만 난 한 번만 필요에 따라 그 바보 느낀다.

  • 정적 클래스에 init() 정적 메서드를 추가 할 수는 있지만 public static 메서드는 사용하지 않습니다.

  • 수퍼 클래스의 정적 멤버를 설정하고 끝에는 수퍼 클래스의 정적 물건에 대한 원격 컨트롤과 같은 무언가를 null로 지정하는 단일 목적으로 서브 클래스를 만듭니다.

여기에는 어떤 위험이 있는지 또는 더 간단한 방법이 있는지 모르겠습니다.

편집 : 는, 정적 블록 그래서 초기화를 그 문맥 클래스에 전달 될 필요가 정적 내가 (안드로이드에 익숙하지 않은 사람들을 위해) 문맥을 필요로 회원들과 init을하지하는 등

+0

왜 당신이 목적을 위해 추상 클래스에 정적 메서드가 필요합니까? 추상 클래스의 생성자에서 모든 확장 클래스에 공통 논리를 작성할 수 있습니다. 이 대답 좀 봐 http://stackoverflow.com/a/261159/572830 –

+0

당신이 자신의 사용자 정의보기 또는 스타일을 정의하고 그들로부터 상속 받아야한다고 생각합니다 – CocoNess

+0

@ TanjaV 문제가 남아, 내가 통과해야합니다 일부 정보는 런타임에 최종 크기 계산을 수행하고 그 정보는 내 기본 클래스를 상속하는 모든 클래스 사이에 정적으로 공유하고 싶습니다. – NikkyD

답변

0

하거나 추가 할 정적 블록과 그들을 거기 초기화 :

public abstract class Foo { 
    public static final int DEFAULT_PAINTS_SIZE = 5; 
    public static Paint [] paints; 

    static { 
     paints = new Paints[DEFAULT_PAINTS_SIZE]; 
     // initialize the values somehow. 
    } 
} 
+0

시작시 일부 설정을 사용할 수 없으므로 정적 블록에 필요한 모든 정보가 제공되지 않습니다. – NikkyD

0

당신은 직접 초기화 할 수 있습니다 :

public class MyClass { 
    private static MyStatic myStaticObject = new MyStatic(); 
} 

또는 정적 초기화 블록에

:

public class MyClass { 
    private static MyStatic myStaticObject; 
    static { 
     //something = stuff 
     myStaticObject = new MyStatic(something); 
     //more stuff 
    } 
} 
+0

시작시 일부 설정을 사용할 수 없으므로 정적 블록에 필요한 모든 정보가 없을 수 있습니다. – NikkyD

+1

그런 다음 정보를 사용할 수있게되면 초기화하십시오. 인스턴스 메서드에서 정적 필드를 초기화하는 것은 합법적입니다. – m3th0dman

+0

이것에 대한 간단한 예를 들어 주시겠습니까? – NikkyD

관련 문제