| import java.lang.reflect.*; |
| |
| interface one |
| { |
| int n(int N); |
| } |
| |
| interface two |
| { |
| int nn(int N); |
| } |
| |
| interface three |
| { |
| int nnn(int N); |
| } |
| |
| class arse implements one, two |
| { |
| public int n(int N) { return N; } |
| public int nn(int N) { return N*2; } |
| } |
| |
| class arsey implements two, one, three |
| { |
| public int n(int N) { return N*4; } |
| public int nn(int N) { return N*8; } |
| public int nnn(int N) { return N*16; } |
| } |
| |
| public class InvokeInterface extends arse |
| { |
| int f () |
| { |
| return flunk.nn(1); |
| } |
| static two flunk = new arse(); |
| static three flunkey = new arsey(); |
| public static void main(String[] s) throws Throwable |
| { |
| Class[] argtypes = {Integer.TYPE}; |
| Method m = two.class.getMethod("nn", argtypes); |
| Object[] args = {new Integer(1)}; |
| System.out.println(flunk.nn(1)); |
| System.out.println(m.invoke(new arse(), args)); |
| m = arse.class.getMethod("nn", argtypes); |
| System.out.println(m.invoke(new arse(), args)); |
| m = two.class.getMethod("nn", argtypes); |
| System.out.println(m.invoke(new arsey(), args)); |
| m = three.class.getMethod("nnn", argtypes); |
| System.out.println(m.invoke(new arsey(), args)); |
| m = arsey.class.getMethod("nnn", argtypes); |
| System.out.println(m.invoke(new arsey(), args)); |
| } |
| } |