
public static Object getType(Class c) throws Exception{
Field f = cgetDeclaredField("TYPE");
Object obj = fget(c);
return obj;
}
public static void main(String[] args) throws Exception {
Systemoutprintln(getType(Integerclass));
}
在JAVA中动态执行类的静态方法
/
在JAVA中,通过ClassforName()方法可以动态决定加载哪一个类,这个功能对于相同接口的不同实现来讲非常有用。比如对于设计好的数据库连接池接口,我们可以有多种的接口实现类来完成相同的功能,同时用户可以简单的通过修改配置文件来指定实际使用哪一个实现类,在源代码里面通过读取配置文件信息,并用ClassforName(configClassName)getInstance()就可以构造一个特定的实现类实例,而不用每次修改源代码。这样对于程序来讲只用关心接口的定义,用户只用进行配置文件的设置就完成了同一功能的不同实现的切换。
但是如果实现类需要通过静态方法来进行初始化的时候,动态加载的过程就会复杂一些。同样的以数据库连接池为例,通常连接池的构造函数都会被定义为私有的,而通过自定义的getInstance()静态方法来得到唯一实例。这种情况下简单的通过ClassforName()getInstance()就无法正确构造实例。
幸好JAVA所提供的反射机制(Reflection)为我们提供了完整了探悉类内部结构的方法。通过反射机制,我们能够完成基本上所有的运行时决定的动作(虽然这一实现要比其他动态语言,比如PHP,的eval()的使用要复杂的多)。
下面通过实际的例子说明如何在运行时动态访问类的静态方法。
//通过包获取类对应的类对象
Class<> f= ClassforName("javaioFile");
//通过对象去获取对象对应的类的类对象
//File file=new File("");
Class<> f= filegetClass();
//通过类的class属性去获取类的类对象
Class<> f= Fileclass;
//获取方法的数组
Method[] methods= fgetMethods();
循环得到你想要的这 类中的方法,字段,属性
java中获取一个对象可以使用单例模式,实例如下:
Class A:public class A {
public void SayHello() {
Systemoutprintln("Say Hello From Class A");
}
public static A getInstanceOfA() {
return new A();//A类中A的实例变量
}
private A(){}
}
Class B:
public class B {
public static void main(String[] args) {
A a = AgetInstanceOfA();//返回的是A类中的A的实例变量
aSayHello();//调用A中的SayHello方法
}
}
如何获取类的注解和注解的内容
java 反射Class someClass = SomegetClass();
注解 somtAnnotation = someClassgetAnnotation(注解class)
属性类型 属性值 = someAnnotation属性();
要一一遍历么?
这个要根据需求来顶,谁用谁遍历,
先获取Method对象
以下仅供参考
package comkiddtestzhidao;import javalangreflectMethod;
/
Hello world!
/
public class Main {
public static void main(String[] args) {
Method method1 = null;
Method method2 = null;
try {
method1 = ClassforName("comkiddtestzhidaoCat")getMethod("getName", (Class<>[]) null);
method2 = ClassforName("comkiddtestzhidaoCat")getMethod("getChilds", (Class<>[]) null);
} catch (NoSuchMethodException ex) {
exprintStackTrace();
} catch (SecurityException ex) {
exprintStackTrace();
} catch (ClassNotFoundException ex) {
exprintStackTrace();
}
if (null != method1) {
Systemoutprintln(method1getGenericReturnType()getTypeName());
}
if (null != method2) {
Systemoutprintln(method2getGenericReturnType()getTypeName());
}
}
}
class Cat {
private String name;
private Cat[] childs;
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public Cat[] getChilds() {
return childs;
}
public void setChilds(Cat[] childs) {
thischilds = childs;
}
}
以上就是关于java 如何获取基本类的class全部的内容,包括:java 如何获取基本类的class、Java静态方法获取所属类的信息、Java中怎样获取类中的方法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)