zzxiaoma
zzxiaoma
2011-01-10 10:20

collection包中BeanMap的设计

已采纳

public static HashMap defaultTransformers = new HashMap();

static {
    defaultTransformers.put( 
        Boolean.TYPE, 
        new Transformer() {
            public Object transform( Object input ) {
                System.out.println("s:"+Boolean.valueOf( input.toString() ));
                return Boolean.valueOf( input.toString() );
            }
        }
    );

public interface Transformer {

public Object transform(Object input);

}
我摘抄出来一段,上面的System.out并没有输出,不明白没有实现Transformer 这个借口的类就能new Transformer() ?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

6条回答

  • zhanjia 二进制之路 10年前

    [quote]上面是static,我初始化实例的时候应该自动调用[/quote]

    自动调用是没错
    创建了一个对象
    [code="java"]
    new Transformer() {
    public Object transform( Object input ) {
    System.out.println("s:"+Boolean.valueOf( input.toString() ));
    return Boolean.valueOf( input.toString() );
    }
    }
    [/code]

    并将这个对象放到defaultTransformers中,但并没有调用transform方法

    点赞 评论 复制链接分享
  • lang_shao lang_shao 10年前

    [quote]上面是static,我初始化实例的时候应该自动调用[/quote]

    自动调用了 defaultTransformers.put() ,但没有调用 put 的参数里的方法。

    点赞 评论 复制链接分享
  • zhanjia 二进制之路 10年前

    这种初始化类的方式属于匿名类的使用,你可以去了解一下匿名类

    点赞 评论 复制链接分享
  • zhanjia 二进制之路 10年前

    [quote]上面的System.out并没有输出[/quote]

    你没有调用的时候当然不会输出:
    [code="java"]
    import java.util.HashMap;

    public class Test {
    public static HashMap defaultTransformers = new HashMap();

    static {
        defaultTransformers.put(Boolean.TYPE, new Transformer() {
            public Object transform(Object input) {
                System.out.println("s:" + Boolean.valueOf(input.toString()));
                return Boolean.valueOf(input.toString());
            }
        });
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        Transformer transformer = (Transformer) defaultTransformers.get(Boolean.TYPE);
        transformer.transform(false); // 调用
    }
    

    }

    [/code]

    输出结果:
    s:false

    点赞 评论 复制链接分享
  • zhanjia 二进制之路 10年前

    [quote]不明白没有实现Transformer 这个借口的类就能new Transformer() ?[/quote]

    这个里面的代码就是实现了
    [code="java"]
    new Transformer() {
    public Object transform( Object input ) {
    System.out.println("s:"+Boolean.valueOf( input.toString() ));
    return Boolean.valueOf( input.toString() );
    }
    }

    [/code]

    点赞 评论 复制链接分享
  • lang_shao lang_shao 10年前

    [code="java"]
    new Transformer() {
    public Object transform( Object input ) {
    System.out.println("s:"+Boolean.valueOf( input.toString() ));
    return Boolean.valueOf( input.toString() );
    }
    }
    [/code]

    这不就是Transformer的现实吗?

    点赞 评论 复制链接分享

相关推荐