我为许多元素设置了可见性。现在我想创建一个接收Object
的方法,假设每个类的顶级父级都是Object
,那就足够了?如果这就是我应该做的,我应该如何施展它们?
我想检查收到的对象是否包含setVisibility
方法,以及它是否执行某些操作。
我应该尝试运行该方法并捕获异常吗?听起来很蠢。 那我该怎么办?
答案 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接收/处理尝试定义自己的接口甚至抽象类更合适。在您的界面或抽象类中定义您的可见性方法并处理它