java中的匿名类有一个倍儿神奇的用法,见下面代码示例:

1 package contract; 
2  
3 public interface ISay { 
4     void sayHello(); 
5 }

上面是一个简单的接口,下面是如何使用:

 1 package jimmy; 
 2 import contract.ISay; 
 3 public class Program { 
 4     public static void main(String[] args) { 
 5         ISay say = new ISay() {           
 6             public void sayHello() { 
 7                 System.out.println("Hello java!"); 
 8             } 
 9         }; 
10     } 
11 }

初看上去,就好象在“不提供接口实现的情况下,直接new了一个接口实例”,对于C#er来说,有一种尽毁三观的赶脚。

还好这只是假象,观察bin目录下的class输出,会发现有一个类似Program1.classProgram1.class的文件,如果反编译观察一下,发现原来是编译器自动生成一个类Program1:

 1 package jimmy; 
 2  
 3 import contract.ISay; 
 4 import java.io.PrintStream; 
 5  
 6 class Program$1 
 7   implements ISay 
 8 { 
 9   public void sayHello() 
10   { 
11     System.out.println("Hello java!"); 
12   } 
13 }

如果有些场合,只需要临时需要创建一个接口的实现类,上面的"技巧"可以用来简化代码.


发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java 中的内部类总结知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。