要获取MetaData,我们使用Java反射API。Java Refractor类提供了获取类元数据的方法。在这里,我们将使用以下方法。
class.forName()
此方法加载作为参数提供的类,如果找不到class,它将抛出错误。
isInterface()
此函数检查类是否为接口,并返回布尔值。
getDeclaredFields()
返回类的所有字段名称。
getDeclaredMethods()
这将返回一个类的所有方法名称。
getDeclared构造函数()
这将返回一个类的所有构造函数名称。
让我们通过此示例更清楚地了解它们。在这里,我们有一个包含三个字段的类名称Product和一个名为NoteBook的接口。
package logicProgramming; /* * In This Program We are Going to Get Meta Data Of Running Class * And Going To Examine And Change The Behavior Of Class */ import java.lang.Class; import java.lang.reflect.构造函数; import java.lang.reflect.Field; import java.lang.reflect.Method; //接口 interface NoteBook { int bookId=100; } //一堂课 class Product{ private int productId; private String name; public long price; //构造函数 public Product(int productId,String name,long price) { this.productId=productId; this.name=name; this.price=price; } //构造函数 public Product() {} //此函数打印对象的数据 public void putProduct() {System.out.println("ProductId :"+this.productId+"\nName :"+this.name+"\nPrice"+this.price);} public String toString() { return("ProductId :"+this.productId+"\nName :"+this.name+"\nPrice"+this.price); //返回对象,以便打印对象值,而不是 //比它的十六进制地址 } } //主类 public class ExClassMetaData_ReflectionAPI_JAVA { public static void main(String arg[]) { try { //Class.forName(ClassName)用于加载类 Class cs=Class.forName("logicProgramming.Product"); System.out.println(cs.getName()); //getName() 函数正在获取类的名称 //getClass()也用于获取类的元数据 System.out.println(); Product P=new Product(); Class pcls=P.getClass();//获取 Product 类的元数据 System.out.println(pcls.getName()); System.out.println(); //public boolean isInterface() tells that whether //当前类是接口或简单类 System.out.println(Class.forName("logicProgramming.Product").isInterface()); //Book是一个接口,因此它将打印True ...- System.out.println(); System.out.println(Class.forName("logicProgramming.NoteBook").isInterface()); //public Field[] getDeclaredFields() //返回此类所有字段的名称数组。 Field fields[] =cs.getDeclaredFields(); System.out.println(); System.out.println("Fields Of product Class"); //循环打印类的字段名称 for(int i=0;i<fields.length;i++) {System.out.println(fields[i]);} //public Method[] getDeclaredMethods() //返回此类的所有方法的名称数组。 Method methods[]=pcls.getDeclaredMethods(); System.out.println(); System.out.println("Methods Of product Class"); //循环打印类的方法名称 for(int i=0;i<methods.length;i++) {System.out.println(methods[i]);} //public constructor[] getDeclared constructors() //返回此类的构造函数总数。 Constructor<Product> constructors[]=pcls.getDeclaredConstructors(); System.out.println(); System.out.println("constructors Of product Class"); //循环以打印类的构造函数名称 for(int i=0;i<constructors.length;i++) {System.out.println(constructors[i]);} } catch(ClassNotFoundException e) { System.out.println(e); } } }
输出结果
在这里,我们拥有该类的所有元数据。
注意: “ logicProgramming”是软件包的名称,用您的软件包名称替换