JavaReflection API提供了更改类行为的方法。让我们通过一个例子来理解这一点。
class Product{ private string name; public int price; }
在这里,如果我们可以访问类的价格数据成员,因为它是公共的,但是我们不能访问名称数据成员,因为它是私有的。为此,我们必须使用javaReflectionAPI方法setAccessible(true)。此方法更改数据成员的行为,采用布尔参数true或false(如果将其设置为true),则该数据成员将变得可访问。
让我们在程序中实现它:
import java.lang.reflect.Field; //代表计算机的类 class Computer { private String MacNo; //的私人行为 //该成员在运行时通过Java Reflection API- private int productId; public long price; //构造函数 public Computer(String MacNo,int productId,long price) { this.MacNo=MacNo; this.productId=productId; this.price=price; } //字符串功能以显示数据对象的值 public String toString() { return("Mac Number :"+this.MacNo+"\nProductId :"+this.productId+"\nPrice :"+this.price); } } //主类 public class ExChangIngTheBehaviorOfClassAtRunTime_JAVAREFLECTION_API { public static void main(String[] args) { Computer C=new Computer("MDSK89*$",100,29000); System.out.println(C); ///////现在我们将访问productId让我们看到......- try { Class plsc=Class.forName("logicProgramming.Computer"); //getDeclaredField返回类的指定字段 Field F1=plsc.getDeclaredField("productId"); //将可访问性设置为true,以便我们可以访问字段 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); //嘿,我们可以访问私人会员 //类计算机Mac编号和产品ID- } catch(Exception e) { System.out.println(e); } } }
输出结果
在这里,我们可以访问上述类中私有的字段。