服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

控制对类内部数据或函数成员访问的类


  public class protectclasstest{
  public static void main(string[] args) throws protectclass.noaccessexception{
  protectclass p1=new protectclass("chenqi","100001");
  system.out.println("p1.bankaccount:"+p1.getfield(p1.bankaccount_pos));
  system.out.println("p1.bankpassword:"+p1.getfield(p1.bankapassword_pos));
  try{
  p1.setmethod(p1.bankaccount_pos,"risingsoft");
  }
  catch(protectclass.noaccessexception error){
  system.out.println("set p1.bankaccount:"+error);
  }
  try{
  p1.setmethod(p1.bankapassword_pos,"100002");
  }
  catch(protectclass.noaccessexception error){
  system.out.println("set p1.bankpassword:"+error);
  }
  system.out.println("p1.bankaccount:"+p1.getfield(p1.bankaccount_pos));
  system.out.println("p1.bankpassword:"+p1.getfield(p1.bankapassword_pos));
  }
  }
  
  class protectclass{
  //user define exception
  public static final class noaccessexception extends exception{
  public string tostring(){
  return "no privilege to access this property(field/method)";
  }
  }
  //static final defination section
  public static final int bankaccount_pos=0;
  public static final int bankapassword_pos=1;
  //inner property state array
  //只需要修改以下的对象元素访问全县数组即可动态控制用户可读/写的数据成员范围。(0,0 / 0,1 / 1,0 / 1,1)
  private static final int[] property_array={0,1};
  //get the property state array count
  private final int getpropertycount(){
  return (property_array!=null)?property_array.length:0;
  }
  //get the property available state
  public final boolean getpropertyavailable(int pos){
  return (pos>=0 && pos<getpropertycount())?(property_array[pos]==1):false;
  }
  //private property defination section
  private string bankaccount;
  private string bankpassword;
  private void setbankaccount(string bankaccount) throws noaccessexception{
  if (getpropertyavailable(bankaccount_pos))
  this.bankaccount = bankaccount;
  else
  throw new noaccessexception();
  }
  private void setbankpassword(string bankpassword) throws noaccessexception{
  if(getpropertyavailable(bankapassword_pos))
  this.bankpassword=bankpassword;
  else
  throw new noaccessexception();
  }
  
  protectclass(string bankaccount,string bankpassword) throws noaccessexception{
  /*
  如果使用这两句被屏蔽代码,则对象无法构造
  this.setbankaccount(bankaccount);
  this.setbankpassword(bankpassword);
  */
  this.bankaccount=bankaccount;
  this.bankpassword=bankpassword;
  }
  protectclass() throws noaccessexception{
  this("","");
  }
  
  public final void setmethod(int methodid,string param) throws noaccessexception{
  switch(methodid){
  case bankaccount_pos:
  try{
  setbankaccount(param);
  }
  catch(noaccessexception error){
  throw error;
  }
  break;
  case bankapassword_pos:
  try{
  setbankpassword(param);
  }
  catch(noaccessexception error){
  throw error;
  }
  break;
  }
  }
  private string getbankaccount(){
  if (getpropertyavailable(bankaccount_pos))
  return bankaccount;
  else
  return null;
  }
  private string getbankpassword(){
  if(getpropertyavailable(bankapassword_pos))
  return bankpassword;
  else
  return null;
  }
  public final string getfield(int methodid){
  switch(methodid){
  case bankaccount_pos:
  return getbankaccount();
  case bankapassword_pos:
  return getbankpassword();
  default:
  return null;
  }
  }
  }

扫描关注微信公众号