怎么根据类名和方法名调用方法

怎么根据类名和方法名调用方法,第1张

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怎么调用那个类的类方法、怎么调用类中的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9465769.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存