对于静态工厂的这个有点不太理解,请各位给通俗的讲一下,谢谢
网上说静态工厂的一个优点是:可以返回该类的任何子类
同时给了一小段代码:
import java.util.*; public abstract class Foo { private static Map implementations = null; private static synchronized void initMapIfNecessary() { if (implementations == null) { implementations = new HashMap();
} } public static Foo getInstance(String key) { initMapIfNecessary(); Class c = (Class) implementations.get(key); if (c == null) return new DefaultFoo(); try { return (Foo) c.newInstance(); } catch (Exception e) { return new DefaultFoo(); } } public static void main(String[] args) { System.out.println(getInstance("NonexistentFoo")); } } class DefaultFoo extends Foo { }
标红的代码请给解释一下,implementations是一个hashMap,implementations.get(key)有什么意义呢?
解决方案 »
- 求助:谁有JSP的管理系统的例子?参考一下,非常感谢
- ****求免费论坛系统****
- 求助:怎么会出现NoSuchMethodError?!!!
- hibernate 隐式多态的配置,在SQLSEVER中的外键约束
- 有关jsperReport的问题,高手请进!共同研究
- struts软件包的问题
- 按钮制作
- apache能否直接支持jsp?
- 各位大侠快帮我看看下面的servlet出什么问题了
- redis异常JedisClusterMaxAttemptsException: No more cluster attempts left.
- 如何从javasript传参数给servlet?
- 使用jsp 连接数据库SQL Server2005出现http500错误
Class<Foo>类型,感觉你这代码逻辑上有点问题,因为implementations里面永远不会存放元素。
Class c = (Class) implementations.get(key)因为implementations是一个HashMap。
比如:Map map = new HashMap();
map.get(key)//这里就是取得这个key的value值。意义就是看implementations.get(key)里面有还是没有这个key。
implementations.get(key)如果为空的话就new DefaultFoo()
不为空的话就是取得(Foo)c.newInstance()这个对象的类型。