해당 인터페이스를 구현한 객체를 생성할 수 있습니다.
인터페이스와 클래스가 다음과 같이 정의되어 있다고 합시다.
인터페이스입니다.
package some.test;
public interface SomeInterface{
public int some();
}
클래스입니다.
package some.test;
public class SomeClass{
public int test( SomeInterface i ){
return i.some();
}
}
해당 인터페이스와 클래스의 타입정보를 특정할 수 없는 상황에서도
다음과 같이 인터페이스를 구현한 객체를 생성하고 사용할 수 있습니다.
public static void main( String[] args )throws Exception{
InvocationHandler impl = new InvocationHandler(){
@Override
public Object invoke( Object proxy, Method method, Object[] args )throws Throwable{
if( method.getName().equals( "some" ) ){
return new Integer( 3 );
}
return null;
}
};
Object param = Proxy.newProxyInstance( TestInterface.class.getClassLoader(), new Class[]{ Class.forName( "some.test.SomeInterface" ) }, impl );
Object someCls = Class.forName( "some.test.SomeClass" ).newInstance();
Method m = someCls.getClass().getMethod( "test", Class.forName( "some.test.SomeInterface" ) );
Object rtn = m.invoke( someCls, param );
System.out.println( rtn );//3
}