2012-01-04 3 views
0

안녕하세요 자바 방법을 범위 :정적 구현

public String abstract getAnimalName(); 

그리고

class Ralph extends Animal 
{ 
    public String getAnimalName(){return "RALPH";} 
} 

내가 "랄프"의 getAnimalName이 원하는 서브 클래스 : 나는 다음과 같은 방법을 정의하는 클래스가 정적 인 이유는 랄프의 이름이 무국적 인 버전이기 때문입니다.

따라서 인터페이스를 만족하면서 정적으로 getAnimalName을 구현하려고합니다. 이것이 가능한가 ? 어쩌면 런타임에 정적 객체를 프록시 처리하여 객체 구현을 제공하기 위해 의존성 삽입 또는 AOP 기술을 사용할 수있는 방법이 있습니까?

명백한 해결책 (객체 스코프 방법이 정적 방법을 감싸는 것)은 내 취향에 보일러 판이 약간 있습니다.

답변

4

아니요, 마지막 제안은 할 수있는 것입니다.

이것은 디자인에서 의심스러운 부분 일 수있는 경고 일 수 있습니다.

랄프는 인스턴스이므로 getAnimalName 계약을 준수해야합니다.

2

가장하고있을 것이다 : 당신이 원하는 경우

class Ralph extends Animal { 

    private static final String NAME = "RALPH"; 

    public String getAnimalName(){return NAME;} 
} 

또한 NAME 공개 할 수 있습니다.

+2

Ralph 외부에서 액세스 할 수 있으려면 다른 범위로 이동해야합니다. 수정을 방지하기 위해 NAME을 (를) 최종 지정하도록 제안합니다. –

+0

당신 말이 맞아요. 답변에서 수정되었습니다. – yair

1

디자인을 확실히 검토해야합니다. 아키텍쳐에 만족하면 클래스를 싱글 톤으로 변환하고 Ralph.getInstance(). getAnimalName()을 사용합니다.

아마도 주석을 사용 하시겠습니까?

@Name("RALPH") 
class Ralph extends Animal 
{} 

당신은 클래스 객체 오프 주석 해낼 수 : http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html#getAnnotations() 왜 당신이 다음의 방법으로 코드를 변경하지 않는

0

을 :

class Ralph extends Animal 
{ 
    public static String NAME = "RALPH"; 
} 

class Animal { 
    public static String NAME; 

} 

당신의 getAnimalName를 (사용보다 더) 방법.

+0

나는 이것이 위험하다는 것을 믿는다. 나는 var 대신에 숨기는 것이 아니라 숨긴다고 믿는다? – jayunit100

+0

NAME이 (가) Ralph 최종 결선에 진출했습니다. –

0

실제로 하나 이상의 메소드 인스턴스에 대한 개념이 없습니다. 복수 Ralph 개체를 만들 때 추가 메모리를 추가하지 않습니다.

그러나 메타 유형을 만들 수 있습니다.

관련 문제