1

多くの要素の可視性をオンとオフに設定しています。Objectここで、すべてのクラスの最上位の親がであると仮定して、を受け取るメソッドを作成したいのですがObject、それで十分でしょうか?それが私がすべきことである場合、どのようにそれらをキャストする必要がありますか?setVisibilityそして、受け取ったオブジェクトにメソッドが含まれているかどうか、そしてそれがいくつかのアクションを実行しているかどうかを確認したいと思います。

メソッドを実行して例外をキャッチする必要がありますか?ばかげているように聞こえます。それならどうすればいいですか?

4

3 に答える 3

2

リフレクションを使用するか、インターフェースを実装することができます。

于 2012-05-17T18:01:46.037 に答える
2

ここの最初の例、http://java.sun.com/developer/technicalArticles/ALT/Reflection/を参照してください。

   import java.lang.reflect.*;

   public class DumpMethods {
      public static void main(String args[])
      {
         try {
            Class c = Class.forName(args[0]);
            Method m[] = c.getDeclaredMethods();
            for (int i = 0; i < m.length; i++)
            System.out.println(m[i].toString());
         }
         catch (Throwable e) {
            System.err.println(e);
         }
      }
   }

基本的に、見ているオブジェクトのクラス変数を取得し、を呼び出してgetDeclaredMethods()メソッド名の配列を取得します。次に、メソッド名がクラスに存在するかどうかを確認できます。

ページのさらに下には、メソッドを呼び出すための例もあります。

   import java.lang.reflect.*;

   public class method2 {
      public int add(int a, int b)
      {
         return a + b;
      }

      public static void main(String args[])
      {
         try {
           Class cls = Class.forName("method2");
           Class partypes[] = new Class[2];
            partypes[0] = Integer.TYPE;
            partypes[1] = Integer.TYPE;
            Method meth = cls.getMethod(
              "add", partypes);
            method2 methobj = new method2();
            Object arglist[] = new Object[2];
            arglist[0] = new Integer(37);
            arglist[1] = new Integer(47);
            Object retobj 
              = meth.invoke(methobj, arglist);
            Integer retval = (Integer)retobj;
            System.out.println(retval.intValue());
         }
         catch (Throwable e) {
            System.err.println(e);
         }
      }
   }
于 2012-05-17T18:05:03.247 に答える
0

Objectで受信/処理する代わりに、独自のインターフェイスを定義してみてください。そうしないと、抽象クラスでさえも適切になります。インターフェイスまたは抽象クラスで可視性メソッドを定義し、それを処理します

于 2012-05-17T18:02:44.133 に答える