
import javalangreflectInvocationTargetException;
import javalangreflectMethod;
public class TheReflect {
/
@param args
@throws NoSuchMethodException
@throws SecurityException
@throws InvocationTargetException
@throws IllegalAccessException
@throws IllegalArgumentException
/
public static void main(String[] args) throws SecurityException,
NoSuchMethodException, IllegalArgumentException,
IllegalAccessException, InvocationTargetException {
// TODO Auto-generated method stub
/ 详细的API使用方法参加JDK的doc文档中的javalangClass和javalangreflectMethod /
/ 相当于你在Spring的Context中获取bean对象 /
TheBeanClazz theBean = new TheBeanClazz();
/ 通过获取到bean对象得到该对象的类定义 /
Class clazz = theBeangetClass();
/ 通过上面得到的类定义对象clazz得到指定名称和参数类型列表的方法定义 /
Method m = clazzgetMethod("sayHello", Stringclass);
/
在指定的对象(theBean)上调用符合上面方法定义的方法,
并且制定方法的入口参数值列表(这个方法只有一个参数,
如果是多个参数用逗号分隔)
/
String msg = (String) minvoke(theBean, "床上等你");
Systemoutprintln("返回的结果 :" + msg);
}
}
class TheBeanClazz {
public String sayHello(String s) {
Systemoutprintln("Hello :" + s);
return "Hello :" + s;
}
}
NSClassFromString和NSStringFromClass
NSStringFormClass 这个不用说,看命名都应该知道吧。
NSClassFromString 将NSString转换成一个Class,如果不存在,返回一个nil。
正常来说,
id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];
和
id myObj = [[MySpecialClass alloc] init];
是一样的。但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。
因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。
比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:
[[NSClassFromString(@"NSTask") ]]
而不要直接使用[NSTask ]这种写法。
NSClassFromString的好处是:
1 弱化连接,因此并不会把没有的Framework也link到程序中。
2 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。
同样的,还可以通过一个方法名字来得到一个Selector,然后就可以动态的调用这个Selector了,在Obj-c里面,一切都是动态的。
类似的函数如下:
NSClassFromString
NSGetSizeAndAlignment
NSLog
NSLogv
NSSelectorFromString
NSStringFromClass
NSStringFromSelector
java类有两种方法一种是类方法就是用static修饰的,一种是实例方法,就是没有static修饰的方法。类方法可以同时类名方法名的方式调用。而实例方法必须先生存类的实例在通过实例方法名的方式调用。例如:
public class MethodCall
{
public static void main(String[] args)
{
TestsayStatic();
Test test = new Test();
testsayInstance();
}
}
class Test
{
public static void sayStatic()
{
Systemoutprintln("这是一个静态方法。");
}
public void sayInstance()
{
Systemoutprintln("这是一个实例方法。");
}
}
以上就是关于怎么根据类名和方法名调用方法全部的内容,包括:怎么根据类名和方法名调用方法、用NSClassFromString得到的class怎么调用那个类的类方法、怎么调用类中的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)