如何使方法接受任何对象并检查它是否包含方法?

时间:2012-05-17 17:55:07

标签: java generic-programming

我为许多元素设置了可见性。现在我想创建一个接收Object的方法,假设每个类的顶级父级都是Object,那就足够了?如果这就是我应该做的,我应该如何施展它们? 我想检查收到的对象是否包含setVisibility方法,以及它是否执行某些操作。

我应该尝试运行该方法并捕获异常吗?听起来很蠢。 那我该怎么办?

3 个答案:

答案 0 :(得分:2)

您可以使用reflection或实施interface

答案 1 :(得分: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);
         }
      }
   }

答案 2 :(得分:0)

而不是使用Object接收/处理尝试定义自己的接口甚至抽象类更合适。在您的界面或抽象类中定义您的可见性方法并处理它