2016-09-10 2 views
-3

키워드 중심 자동화 프레임 워크를 구현했습니다. 모든 키워드를 함수/메소드의 형태로 정의했습니다 (각 키워드는 메소드로, 100 + Keywords 즉 메소드가 있습니다).문자열과 동일한 클래스를 호출하는 방법

Class<?> c = Class.forName("class name"); 
Method method = c.getDeclaredMethod ("method name", parameterTypes) 
method.invoke (objectToInvokeOn, params) 

위 Java Reflation을 사용하여 String과 동일한 메소드를 호출 할 수 있습니다.

이제 구현을 다음과 같이 변경해야합니다. 내 모든 기능을 개별 클래스 (각 클래스의 각 기능)로 변환해야합니다. 그래서 문자열과 같은 클래스 이름을 호출하는 방법을 찾고 있어요. 이걸 도와주세요.

내가 아래에서와 같은 사용 전략 패턴을 구현하기 위해 노력하고 있습니다 :

******************** 1 단계의 *******를 ************** // Strategy.java (인터페이스)

공용 인터페이스 전략 {

public void executeKeyword(); 

}

******** ************ Step2 **************** // Add.java

공용 클래스 추가는 전략을 구현 {

public void executeKeyword() 
{ 

    System.out.println("----Inside the Addition----"); 
} 

}

//Sub.java는

공용 클래스 하위는 전략 {

public void executeKeyword() 
{ 

    System.out.println("----Inside the substraction----"); 
} 

}

를 구현 // Multi.java

공용 클래스 멀티 구현 전략 {

public void executeKeyword() 
{ 

    System.out.println("----Inside the multiplication----"); 

} 

}

******************** 3 단계 ******** ***********************

공용 클래스 컨텍스트 {

private Strategy strategy; 

public Context(Strategy str) 
{ 
    this.strategy=str; 
} 

public void processKeyword() 
{ 
    strategy.executeKeyword();{ 

    } 
} 

}

******************** 4 단계 ***********

공용 클래스 데모 {

public static void main(String[] args) throws ClassNotFoundException { 


    Context ctx=new Context(new Add()); 
    //Context ctx=new Context(new Sub()); 
    //Context ctx=new Context(new Multi()); 

    ctx.processKeyword(); 

    } 

} 

이 있습니까 Context Object에서 클래스 이름 (Add, Sub, Mulit)을 동적으로 전달할 수있는 모든 옵션.

Context ctx = new Context (새 Add());> 여기에 Add, 다음 번에 Sub, then Multi를 전달해야합니다. 어떻게하면 단일 cxt 객체를 유지함으로써이를 달성 할 수 있습니다.

+0

클래스 c = Class.forName ("클래스 이름"); ' –

+1

스택 오버플로에 오신 것을 환영합니다! [둘러보기]를 둘러보고 [도움말], 특히 [* 좋은 질문을하는 방법 *] (/ help/how-to-ask)을 읽으십시오. 질문이 두려운 것 같습니다. 전혀 분명하지 않다. 클래스를 이름으로로드하는 방법과 이름으로 메소드를 찾는 방법을 분명히 알고 있습니다. 질문이 뭐니? (친구 나 동료가 영어로 도움을 주면 도움이 될 것입니다. 완벽한 영어는 ** 필요하지 않지만 ** 우리는 질문을 이해할 수 있어야합니다. 이것은 모욕적 인 것이 아니며, 영어로 많이 작성합니다 ** ** 다른 언어보다 더 낫다.) –

+0

Thanks Marko, 내 질문을 업데이트했는지 확인해주십시오. 이것 좀 도와주세요. – Yuvaraja

답변

0

아래 코드로 클래스 개체를 동적으로 전달할 수 있습니다.위의 코드에서

String className = "Add"; 
     Object xyz = Class.forName(className).newInstance(); 
     Context ctx=new Context(xyz); 
     ctx.processKeyword(); 

: 나는 (추가 내 클래스 이름 중 하나입니다) 클래스 명에 문자열 변수, 즉에 "추가"를 할당하고, 내가 클래스 명 변수에 내 클래스 이름 중 하나를 통과 할 수 후 해당 클래스 호출됩니다. 역동적 인 접근 방식으로 올바르게 작동합니다.

하지만 확실하지 않습니다. 얼마나 효율적입니까? 누구든지이 접근 방식이 좋으면 제안 할 수 있습니까?

관련 문제