2016-10-24 3 views
1

내가 디자인 패턴을 이해하려고 노력하고, 나는 다음과 같이, 내가 구현 된 인터페이스 클래스의 클래스의 이름을 검색 할 수있는 방법 을 알아야합니다전략 디자인 패턴에서 객체의 클래스 이름을 얻기

를 에서
public interface Flys { 

    String fly(); 

} 

// Class used if the Animal can fly 

class ItFlys implements Flys{ 

    public String fly() { 

     return getClass().getName()+" is Flying High"; //not working...gives me the ItFlys class name not Dog class name 

    } 

} 

//Class used if the Animal can't fly 

class CantFly implements Flys{ 

    public String fly() { 

     return "I can't fly"; 

    } 

} 

코드 :이 줄은 ItFlys class에 캡슐화되어 http://www.newthinktank.com/2012/08/strategy-design-pattern-tutorial/ 감사

+0

당신의 'Dog' 클래스는 어디에 있습니까? - 디버깅 도움을 요청하는 질문 (** "왜이 코드가 작동하지 않습니까?") **는 원하는 동작, * 특정 문제 또는 오류 및 문제를 재현하는 데 필요한 가장 짧은 코드를 포함해야합니다. ** ** 질문 자체에서 ** . ** 명확한 문제 성명 **이없는 질문은 다른 독자에게 유용하지 않습니다. 참조 : [최소, 완전하고 검증 가능한 예제를 만드는 방법] –

+0

@JonnyHenly 링크가 유용하다고 생각합니다. (10 개의 클래스를 붙여 넣으면 훨씬 더 명확 해집니다. 여기)와 나는 아주 명확한 problem.If을 제시하면 어떤 디자인 패턴을 알면 링크가 필요하지 않을 것이다;) – Alexis

답변

0

그래서 그것의 포괄적 인 클래스의 이름을 가져옵니다.

return getClass().getName()+" is Flying High"; 

개체의 인스턴스를 사용할 수있는 경우

, 그 클래스를 얻기 위해 다음 간단한 방법은 Object.getClass()를 호출하는 것입니다. 물론 이것은 모두 Object를 상속하는 참조 유형에만 작동합니다. Object 다음 다음

return new Dog().getClass().getSimpleName() + " is Flying High"; 

편집을 원하는 것이 당신의 Dog.java 상속을 가정 : getName() 당신이 직면하고있는 반환 String

2

문제에 패키지 이름을 포함하는도 DogBirdFlys를 구현한다는 것입니다 인터페이스. 대신, 각 클래스 구현을 포함합니다. ItFlys은 설계 상으로는 어떤 클래스에 포함되어 있는지 알지 못하므로 fly()을 호출하면 그 클래스를 감지 할 수 없습니다. fly() 방법 앞으로의 자신의 구현을 제공

public interface Flys { 
    String fly(Object owner); 
} 

// Class used if the Animal can fly 
class ItFlys implements Flys{ 
    public String fly(Object owner) { 
     return owner.getClass().getName()+" is Flying High"; 
    } 
} 

이제 Dog 요구 :

당신은 Object은 "소유자"대표 및 소유자의 클래스에 getName 전화를 취할 fly 방법을 변경하여 문제를 해결할 수 있습니다 그 전화는 flyingType :

public String fly() { 
    flyingType.fly(this); 
} 
+0

고마워, 매우 usefull :) – Alexis