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 的参数里的方法。