해당 인터페이스를 구현한 객체를 생성할 수 있습니다.
인터페이스와 클래스가 다음과 같이 정의되어 있다고 합시다.
인터페이스입니다.
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 }