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() ?

[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方法

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

这不就是Transformer的现实吗?

[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]

[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

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

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

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