记录草稿---类型推断

类型推断
Type interface


import java.util.List;
import java.util.Map;


import com.google.common.collect.Lists;
import com.google.common.collect.Maps;


public class Test{
	
	Map<String ,List<String>> map1 = new HashMap<String ,List<String>>();
	List<String> list1 = new ArrayList<String>();
	
	Map<String ,List<String>> map2 = Maps.newHashMap();
	List<String> list2 = Lists.newArrayList();
}

http://ifeve.com/static-factory-methods-vs-traditional-constructors/

最后一个优点是静态工厂是实例化参数类很简洁。你曾经见过像这样的代码吗?

Map<String, List<String>> map = new HashMap<String, List<String>>();

你在代码的同一行重复相同的参数两次!如果右边的赋值可以从左边被推断出来,那将是很优雅的做法。使用静态方法就可以。下面的代码取自 Guava’s Maps 类:

public static <K, V> HashMap<K, V> newHashMap() {

  return new HashMap<K, V>();

}

所以现在我们的客户端代码变成如下:
Map<String, List<String>> map = Maps.newHashMap();
相当的优雅,对吗?这样的能力被成为类型推断(Type interface)。值得一提的是Java7通过使用方括号运算符(diamond operator)引入了类型推断。所以,如果你使用Java7你可以前面的例子如:

Map<String, List<String>> map = new HashMap<>();
静态工厂的主要缺点是类中没有public或者protected的构造器无法被继承。但事实上,在某种情况下这个一件好事,因为鼓励开发者优先使用组合而不是继承(favor composition over inheritance)。
总的来讲,静态工厂方法提供了许多优点,当你在使用时唯一的不足之处实际上也不会是一个问题。所以,评估一下你的类是否更适合静态工厂,拒绝急切的自动提供公共的构造器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值