问题描述
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() ? 问题补充:上面是static,我初始化实例的时候应该自动调用
解决方案
引用上面是static,我初始化实例的时候应该自动调用自动调用是没错创建了一个对象 new Transformer() { public Object transform( Object input ) { System.out.println("s:"+Boolean.valueOf( input.toString() )); return Boolean.valueOf( input.toString() ); } } 并将这个对象放到defaultTransformers中,但并没有调用transform方法
解决方案二:
引用上面是static,我初始化实例的时候应该自动调用自动调用了 defaultTransformers.put() ,但没有调用 put 的参数里的方法。
解决方案三:
这种初始化类的方式属于匿名类的使用,你可以去了解一下匿名类
解决方案四:
引用上面的System.out并没有输出你没有调用的时候当然不会输出: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); // 调用}}输出结果:s:false
解决方案五:
引用不明白没有实现Transformer 这个借口的类就能new Transformer() ?这个里面的代码就是实现了 new Transformer() { public Object transform( Object input ) { System.out.println("s:"+Boolean.valueOf( input.toString() )); return Boolean.valueOf( input.toString() ); } }
解决方案六:
new Transformer() { public Object transform( Object input ) { System.out.println("s:"+Boolean.valueOf( input.toString() )); return Boolean.valueOf( input.toString() ); } } 这不就是Transformer的现实吗?