2009-09-30 3 views
1

대부분은 펄을 배경으로하고 작업을 자동화하기 위해 주로 쓰는 더러운 작은 앱으로, eval()의 악, 나는 항상 해시를 사용합니다 (perl에서). 저는 현재 "canned response"이메일을 작성하기 위해 작은 프로젝트 (주로 저와 다른 기술 인력 두 명)에게 일하고 있습니다. 덧셈, 뺄셈, 편집 등을 가능하게하기 위해 필자는 XML 형식의 응답 형식을 기본적으로 설명하고 싶습니다. 그리고 내 응용 프로그램에서 XML을 구문 분석하고 런타임에 응답 양식을 작성하게하십시오.java : 변수 값을 객체 이름으로 사용 (eval() 방식이 아님)

<Form Name="first" Title="Title!"> 
    <Label Name="before">Your Request:</Label> 
    <Textbox Name="input"/> 
    <Label Name="after">has been completed.</Label> 
    <Output>%before%%input%%after%</Output> 
</Form> 
<Form Name="second"> 
... 

및 구문 분석을 : 나는 (내가 만든 기존의 자바 툴에 통합하는) 자바를 사용하려면, 그리고 사소한 예를 아래로 삶은, 난 할 노력하고있어 같은 일부 XML을하다 즉, 먼저 JLabel이라는 이름의 JFrame을 만들고 싶습니다.이 JLabel에는 명백한 텍스트, 텍스트 상자, 다른 JLabel이 있습니다. 아이디어를 얻습니다. (결국 출력 태그를 사용하여 응답 형식이 지정됨).

나는 XML을 구문 분석하고 요소 이름 등을 얻을 수 있지만 효과적으로 변수의 값 이름으로 객체를 인스턴스화하는 방법을 모른다 할 수

JFrame $(thisNode.getAttributes().getNamedItem("Name").getNodeValue()) = new JFrame(thisNode.getAttributes().getNamedItem("Title").getNodeValue());

나는 기본적으로 자바 리플렉션에 대한 Google 결과의 전체 첫 페이지를 읽었지만, 내가 뭘 찾고 있는지 잘 모르는 사람은 없었다. 기본적으로 리플렉션에 대한 경험이 전혀 없기 때문에이 작업을 사용하여 수행 할 수있는 작업인지 또는 Perl에서와 동일한 방식으로 작업하고 HashMap 또는 HashTable 오브 Object를 작성해야하는지 궁금합니다. JFrames의 Hash에있는 항목. 또는 나는이 두 범주에 속하지 않는 아이디어에 대해 열려 있습니다. 해시는 일종의 내 대기 응답입니다. 왜냐하면 필자는 Perl에서 여러 번 해본 적이 있기 때문에 해답을 자바로 만들 수 있다고 생각합니다. 그러나 이것을 수행하는 기능 (예 : 리플렉션과 같은 기능)이 있다면 그런 다음 왜 그렇게하지 않았습니까?

답변

0

Java에서 요구하는 것은 불가능합니다. 그런 식으로 작동하지 않으며 동적 언어에서 흔히 볼 수있는 이러한 종류의 트릭은 Java 방식이 아닙니다. 당신은 확실히 수행 할 수

당신은 XML을 읽고로부터 객체를 생성하지만, 변수 이름은 동적 일 수없는 JFrameBuilder 클래스를 만들
JFrame frame = JFrameBuilder.buildFromTemplate("frame.xml"); 

. Java에는 두 단계가 있음을 기억해야합니다.

  1. Java 소스 파일은 바이트 코드로 컴파일됩니다.
  2. 바이트 코드는 Java 인터프리터 (JVM)에서 읽혀 실행됩니다.

원하는 것은 본질적으로 단계 (1)에서 코드를 실행하도록 요청하는 것입니다. 이제 주석은 인터페이스 추가, 메소드 구현 등과 같은 컴파일 단계에서 일을 할 수 있지만 로컬 변수 이름 지정은 그러한 것들 중 하나가 아닙니다.

0

XML을 기반으로 Java 소스를 생성하고 생성 된 코드를 컴파일 한 다음 최종적으로 컴파일 된 코드를 실행할 수 있습니다 (필 수 없음). 생성 된 .class 파일을 저장하고 프로그램을 실행할 때마다 XML을 파싱하는 대신 XML을 다시 사용할 수 있습니다 (XML의 타임 스탬프를 확인하고 마지막 코드 생성 이후 수정 된 경우에만 생성 및 컴파일 할 수 있음)).

관련 문제