2016-12-13 6 views
0

java.lang.Class.getMethodのパラメータ型を定義するためにリテラルを使用するにはどうすればよいですか?任意のクラスの配列のクラスにリテラルを書くにはどうすればいいですか?

public class NewTester 
    { 
     public static void main(String[] args) 
     { 
      System.out.println("START"); 
      Worker myWorker = new Worker(); 
      Thing[] argument = new Thing[] { new Thing("book"), 
              new Thing("pencil") }; 
      Object[] arguments = new Object[] { argument }; 

          // HOW ABOUT LITERALS HERE INSTEAD OF getClass 
      Class<?>[] parameterTypes = new Class<?>[] { argument.getClass() }; 

      Method myMethod; 
      try 
      { 
       myMethod = myWorker.getClass().getMethod("work", parameterTypes); 
      } 
      catch (NoSuchMethodException | SecurityException e) 
      { 
       throw new RuntimeException(e); 
      } 
      try 
      { 
       myMethod.invoke(myWorker, arguments); 
      } 
      catch (IllegalAccessException | 
        IllegalArgumentException | 
        InvocationTargetException e) 
      { 
       throw new RuntimeException(e); 
      } 
      System.out.println("END"); 
     } 

     private static class Worker 
     { 
      @SuppressWarnings("unused") 
      public void work(Thing[] argument) 
      { 
       assert argument.length == 2; 
       assert argument[0].value.equals("book"); 
       assert argument[1].value.equals("pencil"); 
      } 
     } 

     private static class Thing 
     { 
      String value; 
      Thing(String value) 
      { 
       this.value = value; 
      } 
     } 
    } 

私は以下を試しましたが、NoSuchMethodExceptionでgetMethod呼び出しに失敗しました。

Class<?>[] parameterTypes = new Class<?>[] { java.lang.reflect.Array.class }; 
+0

私はあなたの質問を理解するかどうか分かりませんが、あなたは 'Thing []。class'を探しているようです。 – Pshemo

+0

はい。ありがとう。私はカッコを使用することが強制されたためにうまくいくとは思わなかった。 '(あれは)。クラスはコンパイルされませんでした。あなたはそうです。 – H2ONaCl

答えて

1

は、いくつかのTypeあなたはType.classを書くことができます表すリテラルClass取得します。

アレイの場合は、Type[].classを使用してください。

関連する問題