我们说这个内部类依附于它的外部类而存在,可能的原因有:
1、不可能为其他的类使用;
2、出于某种原因,不能被其他类引用,可能会引起错误。
3、当前的类过大,比如某个方法,里面写了非常多的代码,需要重构,如果你想抽象到另外一个类里面,那么不妨考虑一下内部类,因为,这些代码是从当前类抽象出来的,只被当前类所使用,那么用内部类实现也是很好的。下面我们以一个大家熟悉的例子来说明。
这段时间做电信的短信下发的项目,需要对上行用户的手机号做特殊处理,然后下发短信,那么主要功能是下短信,但是在下发之前,需要对用户号码做出处理,满足下面下短信的时候使用。
public class SendSms implements SpInfo
{
public String sendSms(String userID,String productID,int OPType)
{
String res = null;
。。。
SendSms.AddressBean ab = new SendSms.AddressBean();//获得内部类的实例
//用内部类来加工处理用户号码
org.apache.axis.types.URI[] addressesuri = ab.getDownAddress(userID);
。。。
//下面开始组织soapheader,此处也可以用内部类来实现的。
RequestSOAPHeader soapHeader = DownHeader.downHeader_ismp(productID, addressesuri);
。。。
SMS downsms = new SMS();
res = downsms.sendSMS(addressesuri, senderName, charging, down_message,
receiptRequest, soapHeader);
return res;
}
//内部类----此类只被当前的外部类所使用
public class AddressBean
{
public org.apache.axis.types.URI[] getDownAddress(String senderAddress)
{
org.apache.axis.types.URI[] addressesuri = null;
String proaddress = "tel:" + senderAddress;
String[] address = new String[] {proaddress};
addressesuri = new org.apache.axis.types.URI[address.length];
try
{
for (int i = 0; i < address.length; i++)
{
addressesuri[i] = new URI(address[i]);
}
}catch(Exception ex)
{
ex.printStackTrace();
}
return addressesuri;
}
}
}