Java >> Tutoriel Java >  >> Tag >> class

API Java Reflection pour modifier le comportement de la classe

L'API JavaReflection fournit des méthodes pour modifier le comportement d'une classe. Comprenons cela par un exemple.

class Product{
	private string name;
	public int price;
}

Ici, si nous pouvons accéder au membre de données de prix de la classe car il est public mais nous ne pouvons pas accéder au membre de données de nom car il est privé. Pour ce faire, nous devons utiliser une méthode javaReflectionAPI setAccessible(true). Cette méthode modifie le comportement d'un membre de données, prend un paramètre booléen qui est vrai ou faux s'il est défini sur vrai, alors ce membre de données deviendra accessible.

Mettons cela en œuvre dans notre programme :

import  java.lang.reflect.Field;

//a class representing computer
class Computer
{
	private String MacNo;
	//We Will change the private behavior Of 
	//this member At Runtime Through Java Reflection API
	private int productId;   
	public long price;
	
	//constructor
	public Computer(String MacNo,int productId,long price)
	{
		this.MacNo=MacNo;	
		this.productId=productId;
		this.price=price;
	}
	//to string function to show the data object values
	public String toString()
	{
		return("Mac Number :"+this.MacNo+"\nProductId :"+this.productId+"\nPrice :"+this.price);	
	}
}

//main class 
public class ExChangIngTheBehaviorOfClassAtRunTime_JAVAREFLECTION_API {
	public static void main(String[] args) {
		Computer C=new Computer("MDSK89*$",100,29000);
		System.out.println(C);

		/////// Now We Will Access productId Let Us See......
		try 
		{
			Class plsc=Class.forName("logicProgramming.Computer");
			
			// getDeclaredField returns the specified field of the class
			Field F1=plsc.getDeclaredField("productId");
			
			// stting the accessibility to true so that we can access fields
			F1.setAccessible(true);
			int pid=(int)F1.get(C);
			Field F2=plsc.getDeclaredField("MacNo");
			F2.setAccessible(true);
			String MacNo=(String)F2.get(C);
			System.out.println();
			System.out.println("MacNumber :"+MacNo+"\nProductId :"+pid+"\nPrice :"+C.price);
			//Hey We Are Able To Access Private Members 
			//Of Class Computer Mac Number and Product Id     
		}
		catch(Exception e)
		{
			System.out.println(e);
		}
	}
}

Sortie


Ici, nous pouvons accéder aux champs qui étaient privés dans la classe ci-dessus.


Balise Java