看Spring源码看到了用到静态内部类的东西,原来一直理解的不是很好,或者什么时候能够用到能够解决更好的问题
一般写代码都会定义一个接口,那现在先定义接口
定义一个获取描述的接口
public interface Desc {
String getDesc();
}
先写他的一个实现SimpleStringDesc,非常简单
public class SimpleStringDesc implements Desc{
private String name;
public SimpleStringDesc(String name){
this.name = name;
}
public String getDesc() {
return name;
}
}
public class InnerTest {
public static void main(String[] args) {
Desc desc = new SimpleStringDesc("123");
System.out.printf(desc.getDesc());
}
}
测试了一下,是不是还要写构造方法,而且在SimpleStringDesc中的返回值name是他的属性name
测试类在换一下
public class InnerTest {
public static void main(String[] args) {
final String desc = "123";
System.out.println(new Desc(){
public String getDesc() {
return desc; //直接用main的属性放入到内部类中使用,desc必须为final的
}
}.getDesc());
}
}
而且你还可以在接口的实现方法中调用本类中的方法
public class InnerTest {
public static void main(String[] args) {
final String desc = "123";
System.out.println(new Desc(){
public String getDesc() {
return doubleStr(desc); //调用此类中的方法,不用再次接口实现类中,持有此对象
}
}.getDesc());
}
public static String doubleStr(String str){
return str+str;
}
}
Spring中用到的
sharedInstance = getSingleton(beanName, new ObjectFactory<Object>() { //ObjectFactory接口,实现getObject方法,调用的是AbstractBeanFactory的createBean
public Object getObject() throws BeansException {
try {
return createBean(beanName, mbd, args);
}catch (BeansException ex) {
//不处理
}
}
});