문제

이것은 같은 것입니다 반사 그 이름으로 단순히 메소드를 호출 할 수있는 곳, 사전 컴파일 된 포인터가 아닙니다.

JavaScript와 마찬가지로 다음과 같이 할 수 있습니다.

var fun = function(){    alert("Hello World!");    }
fun();

Java/J2ME에서 가능한 것이 있습니까? 어떻게?

도움이 되었습니까?

해결책

J2ME의 통역사를 원한다면 HECL을 확인할 수 있습니다. http://www.hecl.org

J2ME의 일반적인 Java에서 할 수있는 대부분의 '멋진'일을 할 수는 없습니다. 대안은 일련의 if/elseif가 원하는 기능을 호출하지만, 그 일을하는 코드를 작성할 수 있도록 미리 알아야합니다.

다른 팁

이 기능을 모방하는 한 가지 방법은 전략 클래스를 만드는 것입니다.

interface Function
{
    Object call(Object[] arguments);
}

당신이 제안한 일을하기 위해, 단순히 다음을 수행하십시오 (Java와 같이 조금 더 장점) :

static class Fun implements Function
{
    public Object call(Object[] arguments)
    {
        System.out.println("Hello, world");
        return null;
    }
}

Function fun = new Fun();
fun.call(null);

상황에 따라 대신 더 나은 유형이나 제네릭을 사용할 수 있습니다. Object 그리고 Object[] (이 경우, 나는 최대의 유연성을 위해 그것들을 사용했지만, 유형 검사 방식에 많은 것을 제공하지 않으므로 이상적이지 않습니다).

자세한 내용은 전략 설계 패턴.

JavaScript의 폐쇄와 같은 일반적인 방법은 익명의 내부 클래스를 사용하는 것입니다. 그것은 훨씬 더 장점이지만, 거의 똑같은 일을 할 수 있습니다.

Runnable r = new Runnable(){
    public void run(){
        System.out.println("Hello, world!");
    }
};
r.run(); // Prints "Hello, world!"

최종적 인 경우 Enclosing 메소드에서 변수를 참조 할 수도 있습니다.

public static Runnable makeGreeter(final String who) {
    return new Runnable() {
        public void run() { 
            System.out.println("Hello, " + who + "!"); 
        }
    };
}

// ... elsewhere in your program...
Runnable r = makeGreeter("world");
r.run(); // "Hello, world!"

이것은 처음부터 자바에 있었던 표준 재료입니다. Runnable Javadocs에 따르면 매우 편리한 인터페이스는 "스레드에 의해 인스턴스가 실행되도록 의도 된 모든 클래스에 의해 구현되어야한다". Runnable 물론 스레드보다 훨씬 더 많이 사용될 수 있으며 일반적으로 JVM과 다른 곳에서 "실행할 수있는 것"으로 사용됩니다. 물론 인수를 통과하려면 자신의 인터페이스를 만들어야하지만 익명으로 구현 될 수 있습니다. 예를 들어, 사용 @Imagist 's Function 상호 작용:

interface Function {
    Object call(Object[] arguments);
}

// ...
Function helloSayer = new Function(){
    public Object call(Object[] args){
        System.out.println("Hello, " + args[0] + "!");
    }
};
helloSayer.call(new Object[]{ "world" }); // "Hello, world!"

편집하다: 물론 이것은 반사와 관련이 없지만, 예제에는 익명의 기능 만 있지 않습니다.

당신은 역동적 인 방법을 만들었습니까? 반사?

첫 번째는 Java에서 할 수 없지만 통역사를 사용할 수 있습니다 (콩 껍질 자바를 원한다면).

몇 가지 방법이 있습니다.

런타임에 클래스를 만들 수 있습니다 Bcel, 그러나 당신은 바이트 코드를 직접 만들어야합니다. 그리고 바이트 코드가 iffy로 보이면 JVM의 검증자가 수업을 거부 할 수 있습니다. 매우 쉬운 솔루션은 아니지만 가능합니다.

Sun의 Java 6 구현에는 포함됩니다 코뿔소, JavaScript 통역사이므로 약간의 JavaScript를 기꺼이 사용하려는 경우 필요한 작업을 수행 할 수 있습니다.

나는 이것에 대해 너무 확실하지 않지만 JDK를 설치 한 경우 호출 할 수 있다고 생각합니다. javac Java 프로그램에서. javac런타임에 사용자 정의로 출력을로드 할 수 있습니다. ClassLoader 수업.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top