2011-01-30 1 views
1

특정 인터페이스로 캐스트 할 수있는 ActionScript 프록시가 필요합니다.프록시를 인터페이스로 전송하는 방법은 무엇입니까? (또는 프록시에게 인터페이스를 구현하도록 지시하십시오.)

public dynamic class Tracer extends Proxy { 
    flash_proxy override function callProperty(method:*, ... args):* { 
     trace(method + " " + args) 
    } 
} 

var t:* = new Tracer() 
t.sayHello("123") // prints: "sayHello [123]" 

지금 내가 토커 유형으로 "T"를 필요 (난 그냥 정적 타이핑을 사랑하는 이유 묻지 않습니다) :

public interface Talker { 
    function sayHello(s:String):void 
} 

var t:Talker = new Tracer() // throws class cast exception 
t.sayHello("123") 

여기

인터페이스가없는 예이다 질문 : 프록시를 캐스팅하는 방법은 무엇입니까? 당신이 액션 스크립트 3으로 정말 가능한가요 새로운 프록시 http://download.oracle.com/javase/6/docs/api/java/lang/reflect/Proxy.html

을 만들 때

예를 들어, 자바에 대한 솔루션은 인터페이스의 목록을 통과하는 것입니까?

답변

2

일반 액션 스크립트에서는 불행하게도 불가능합니다. 그러나 나는 당신이 as commons bytecode API으로 그것을 할 수 있다고 생각합니다.

+0

나는 당신이 옳다고 생각하며 실수하지 않는다면이 시나리오는 위에 언급 된 페이지에 바로 표시된다. 꽤 흥미로운 클래스/인터페이스 조작을 할 수있는 것처럼 보입니다. 좋은 발견! – bigp

0

정의해야 할 모든 방법을 사용하여 public dynamic class Tracer extends Proxy implements Talker을 선언하면 어떨까요?

+0

그러면 프록시의 전체 아이디어는 쓸모 없게됩니다. 프록시는 메소드를 제거하고 구현하지 않아야합니다. – oshyshko

+0

@ oshyshko - 그렇다면 왜 인터페이스가 필요합니까? 내 유일한 아이디어는 코드 완성에 관한 것이었지만 필요하다면 - 어쨌든 메소드를 정의해야 할 것이다. (가장 좋은 방법은'Proxy'를 확장 한 클래스를 만들어 인터페이스를 구현하는 클래스로 랩핑하는 것이다.) btw 여기에 또 다른 방법이 있습니다. http://www.darronschall.com/weblog/2006/10/multiple-inheritance-in-actionscript-3.cfm – www0z0k

+0

인터페이스에 대한 메소드를 절대로 정의하지 않을 것입니다. 프록시에 의해 구현 될 것입니다. 필요한 모든 것은 내 인터페이스 (발음기)를 Proxy에 전달하고 Talker로 다시 캐스팅 할 수있는 (프록시에 의해 작성된) 인스턴스를 가져오고 (인터페이스를 구현해야 함) 모든 일반 구현으로 사용되지만 Proxy에 의해 생성됩니다. 프로그래머가 아닙니다. 이제는 캐스팅 될 수 없으며, 단지 (동적 인) Object입니다. – oshyshko

관련 문제