如何使用Java访问类的MetaData?

获取MetaData,我们使用Java反射API。Java Refractor类提供了获取类元数据的方法。在这里,我们将使用以下方法。

  1. class.forName()
    此方法加载作为参数提供的类,如果找不到class,它将抛出错误。

  2. isInterface()
    此函数检查类是否为接口,并返回布尔值。

  3. getDeclaredFields()
    返回类的所有字段名称。

  4. getDeclaredMethods()
    这将返回一个类的所有方法名称。

  5. 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);
		}
	}
}

输出结果

使用Java访问MetaData-输出

在这里,我们拥有该类的所有元数据。

注意: “ logicProgramming”是软件包的名称,用您的软件包名称替换