2012-02-21 5 views
2

문자열을 반환하는 getName() 메서드가있는 표준 Java 인터페이스가 있습니까? 나는 내 자신을 만들어야한다는 것을 계속 찾는다 :java : getName() 메소드가있는 표준 인터페이스?

/** objects which know their own names, 
* e.g. that are indexed in a Map by their name 
*/ 
interface NamedObject 
{ 
    public String getName() 
} 

그러나 나는 그곳에 있다면 표준적인 것을 사용하고 싶다. 예는


편집 - 내가 생각하는 내가 특별히 하지는 다음과 같은 상황에 특정한 대안을 제시 대답을할까요, 약간 내 질문에 훈제 청어이다. (나는 NamedObject 인터페이스 여러 번에 대한 필요성으로 실행했습니다, 그래서 그것을 표준 라이브러리의 것이었다 기대했다.)

을하지만 당신은 어떤 배경 컨텍스트를 요구하기 때문에, 여기있다 :

@Override public void stateChanged(ChangeEvent e) { 
    Object obj = e.getSource();    
    if (obj instanceof NamedObject) 
    { 
     String name = ((NamedObject)obj).getName(); 
     /* do something based on object's name */ 
    } 
} 

현재 나의 프로젝트에는 소스, 전송 방법 및 수신자의 세 가지 요소가있는 시스템이 있습니다. 소스에서 수신기로 정보를 얻고 싶습니다. 둘 다 구현을 제어합니다. 불행히도 전송 메서드는 ChangeListener를 지원하는 객체를 사용하므로 모든 수신기가 소스 객체를 얻을 수있는 ChangeEvent을 얻습니다.

그래서 내 소스와 수신기 사이에 묵시적인 공유 의미론을 사용해야합니다. 즉, ChangeEvent에 전달 된 소스 객체가 클래스 X를 선택할 수 있다는 공유 된 이해가 있습니다.이 경우 클래스 X를 선택할 수 있습니다. 관심은 내가 추가 데이터를 얻을 수있는 이름입니다. 나는

+0

내가 아는 한, Java SE API에는 없습니다. – ARRG

+0

정확히이 방법을 사용 하시겠습니까? 몇 가지 예를 보여주십시오. – adarshr

답변

6

:

은이 방법을 다시 구현할 수 있습니다.

일반적인 NamedObject 인터페이스가 의미가 있는지 여부 논쟁의 여지가있다. 예를 들어 Person 클래스와 UnixNamedPipe 클래스를 고려하십시오. 두 인터페이스 모두 동일한 NamedObject 인터페이스를 공유 할 수 있지만 실제로는 그 이름이 크게 다른 의미를 갖습니다. 예를 들어 Collection<NamedObject>PersonUnixNamedPipe이 모두있는 것이 합당한 경우를 볼 수 없습니다.

PetCat, PetDogPetRock 클래스 인 경우 이러한 인터페이스를 정의하는 것이 좋습니다. 하지만 모든 애완 동물에 대해 이미 getName()을 정의한 Pet 수퍼 클래스를 사용하게 될 것입니다. 이 경우 "이름"이 무엇인지 개념이 애완 동물마다 달라지지 않습니다.

1

당신이 자바 API의 provides.As 어디에도하고 있지입니다 ... 난 그냥 다른 jar 파일에있는 소스와 수신기 이후 표준 인터페이스를 사용할 수 있도록 바라고, 내 자신의 인터페이스를 정의 할 수 있습니다 , 함께 가서이 인터페이스로 자신의 클래스를 구현하십시오. 자바

-1

모든 오브젝트는 Object.class를에서 상속됩니다. 종종 객체의 열심히 representive 이름을 얻기 위해 사용되는 toString() 방법이있다. 하지 자바 SE의 API에, 내가 아는

@Override 
public String toString() {  
    return "The name of this Object"; 
} 
+2

"public String toString() : 객체의 문자열 표현을 반환합니다."클래스의 이름을주기 위해 설계된 것이 아니며 기본 동작이 아닙니다. – Viruzzo

+0

클래스의 이름이 아닌 객체의 이름을 원한다고 생각합니다. 인터페이스"NamedObject "를 호출했습니다. –

+1

그렇다면 여전히 의미가 없습니다. 이를 위해 toString()을 사용하는 것은 기본값이나 예상되는 동작이 아니며 모든 클래스에서 사용할 수 있지만 특정 객체에서 해당 의미를 염두에두고 구현되었는지 확인할 수는 없습니다. – Viruzzo