2013-05-05 2 views
0

근본적인 문제가 있습니다.다른 속성을 가진 클래스 속성 가져 오기

다른 클래스 ("기술")를 확장하는 클래스가 여러 개 있습니다. ,의 내가 ID가 "89"과 서브 클래스의 설명을 얻을 필요가 가정 해 봅시다 이제

@Override 
public int getID() 
{ 
    return 69; 
} 

@Override 
public String getName() 
{ 
    return "name"; 
} 

@Override 
public String getDescription() 
{ 
    return "description"; 
} 

:

public abstract int getID(); 
public abstract String getName(); 
public abstract String getDescription(); 

과 서브 클래스 :
는 "스킬"일부 추상 같은 방법이 포함되어 있습니다.

은> 클래스 명을 ID- 저장하는 해시 MAP하는 것보다,이 일을하고 수행하여 클래스의 객체를 얻는 쉬운 방법이 다음과 같은? 당신이 89 "것을 가지고 어디든지

Class cl = Class.forName(classname); 
Object o = cl.getConstructor().newInstance(); 
Method m = cl.getMethod("getDescription"); 
return (String) m.invoke(o); 
+2

이것은 하나의 큰 코드 냄새입니다. 왜 이런 종류의 수업을 확인하고 있습니까? –

+0

그것은 실제로입니다. 그게 내가 왜 더 좋은 길을 요구하는지. 예를 들어, 플레이어는 버프를 얻습니다. 나중에, 나는 선수가 여전히 광을 가지고 있고 나는 단지 ID를 가지고 있는지 확인해야한다. 하지만 그것에 대해 생각하고, 나는 또한 직접 광부의 인스턴스를 저장할 수 있습니다 .. – dr0n3

+0

읽기 : http://steve-yegge.blogspot.com/2008/10/universal-design-pattern.html –

답변

0
Map<Integer,YourObject> yourMap = new HashMap<Integer,YourObject>(); 
yourMap.put(89,new YourObject(89,"description","name")); 
yourMap.put(69,new YourObject(69,"description1","name1")); 
.. 

YourObject eight_nine = yourMap.get(89); 

이 당신이 필요로 무엇을 얻을 수있는 좋은 방법이 아닙니다 ... alltogether 반사를 사용하지 않고 일치하는 인스턴스를 생성하는 작은 공장 방법을 저장하는 장소가되어야 하는가?

관련 문제