对应获取一个类的对象,我们常用的方法就是通过构造器去new一个对象出来!但是我们也可以考虑通过一个静态方法来获取一个类的对象:
这样做的好处
- 这样的方法具体名称,可读性强
@Test
public void test17() {
//这样通过方法名很直观的获取我们想要的对象,很方便
//取得一个A212的对象,属性name="A"的
A212 a=A212.getInstance_name_A();
//取得一个A212的对象,属性name="B"的
A212 a2=A212.getInstance_name_B();
}
class A212{
private static String name;
private A212(){}
public static A212 getInstance_name_A(){
A212 a=new A212();
a.name="A";
return a;
}
public static A212 getInstance_name_B(){
A212 a=new A212();
a.name="B";
return a;
}
}
很简单的就做到每一次调用方法得到的对象都是同一个,可以使用"=="代替equals()方法来判断两个对象是否相等,提高效率
@Test
public void test20() {
A211 a1=A211.getA211();
A211 a2=A211.getA211();
System.out.println(a1==a2);
}
class A211{
private static A211 a=new A211();
public static A211 getA211(){
return a;
}
}
可以返回除本身以外的任何子类对象,甚至可以不用保证对象的类是公有的
@Test
public void test16() {
A213 a=A213.getA214();
a.hello();//A214
}
class A213{
public static A213 getA214(){
return new A214();
}
private static class A214 extends A213{//继承A213,且是private对外不公开
public void hello(){
System.out.println("A214");
}
}
public void hello(){
System.out.println("A213");
}
}
在创建参数化类型时,更代码变得更简洁
@Test
public void test15() {
//传统方法,不过现在的jdk是可以Map<Map<String,String>,Map<String,String>> map=new HashMap<>();
Map<Map<String,String>,Map<String,String>> map=new HashMap<Map<String,String>,Map<String,String>>();
//使用静态方法
Map<Map<String,String>,Map<String,String>> map2=getMap();
}
public static <T,K> Map<T,K> getMap(){
return new HashMap<T,K>();
}
这样做的坏处:
- 当构造器私有化后的类,不能被扩展了