原文地址
[url]http://www.c2.com/cgi/wiki?VarargsCollectionFactoryMethod[/url]
批注:比较短的一篇,中间使用了泛型,可变参数.需要Java1.5环境
如果DoubleBraceInitialization技巧中介绍的一样,Java在使用Collection上没有简单的语法,相比其他语言,Java创建一个集合需要大量的代码,这个技巧介绍的就是使用factory Methods去创建一个可变参数的集合获取方式.
原有Java代码模式
你可以写一个factory 方法进行代替
通过传入可变数量的参数,然后返回所需要的Set集合.
进行调用的方式
doSomethingWith(setOf("banana", "pear", "apple"));
另外一种变形的方法:
调用方式
这个是用的泛型较为复杂.
其他相关的技巧:
OnceAndOnlyOnce
[url]http://www.c2.com/cgi/wiki?OnceAndOnlyOnce[/url]
DoubleBraceInitialization
[url]http://www.c2.com/cgi/wiki?DoubleBraceInitialization[/url]
个人理解:这种方式在J2ME无法使用,需要在J2EE上合理的使用,灵活的使用了泛型提供的便利,能够节约不少代码,不过真正只使用字符串添加的机会并不多,关键还是数据获取部分的设计,这里只是提供了便利的集合获取方法,如果参数较多,那就不太适合了..
[url]http://www.c2.com/cgi/wiki?VarargsCollectionFactoryMethod[/url]
批注:比较短的一篇,中间使用了泛型,可变参数.需要Java1.5环境
如果DoubleBraceInitialization技巧中介绍的一样,Java在使用Collection上没有简单的语法,相比其他语言,Java创建一个集合需要大量的代码,这个技巧介绍的就是使用factory Methods去创建一个可变参数的集合获取方式.
原有Java代码模式
Set<String> fruit = new HashSet<String>();
fruit.add("banana");
fruit.add("pear");
fruit.add("apple");
doSomethingWith(fruit);
你可以写一个factory 方法进行代替
<T> Set<T> setOf(T... things) {
return new HashSet<T>(Arrays.asList(things));
}
通过传入可变数量的参数,然后返回所需要的Set集合.
进行调用的方式
doSomethingWith(setOf("banana", "pear", "apple"));
另外一种变形的方法:
<T> T populateCollection(Collection<T> c, T... things) {
c.addAll(Arrays.asList(things));
return c;
}
调用方式
populateCollection(new ArrayList<String>(), "Meh", "Mlah", "Hmm");
这个是用的泛型较为复杂.
其他相关的技巧:
OnceAndOnlyOnce
[url]http://www.c2.com/cgi/wiki?OnceAndOnlyOnce[/url]
DoubleBraceInitialization
[url]http://www.c2.com/cgi/wiki?DoubleBraceInitialization[/url]
个人理解:这种方式在J2ME无法使用,需要在J2EE上合理的使用,灵活的使用了泛型提供的便利,能够节约不少代码,不过真正只使用字符串添加的机会并不多,关键还是数据获取部分的设计,这里只是提供了便利的集合获取方法,如果参数较多,那就不太适合了..