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;
}
}
}
闽公网安备 35060202000074号