2011年3月31日木曜日

1行目でエラーが出ましたと言わせたい

今回は、ちょっとしたネタです。
知っている人も多いかもしれません。

内容はタイトルの通り「ソースコードの1行目でエラーを出す」方法です。
もしかすると、JVMに依存するかもしれませんのであしからず。

エラーを吐くコードを1行目に書く方法
  1. public class ExceptionAtLine1 {public static void main(String[] x_args) { System.out.println(x_args[100]); } }  
  1. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100  
  2.  at ExceptionAtLine1.main(ExceptionAtLine1.java:1)  
すぐに思いつく方法です。

いや、そんなの当たり前だろって思われてる人も多いでしょう。

では、以下の方法はどうでしょうか?

Genericsを ”利用して” エラーを吐く方法
  1. package sample;  
  2.   
  3. public class ExceptionAtLine1Zwei {  
  4.   
  5.  public static void main(String[] x_args) {  
  6.   IMethod method = new IMethodImpl();  
  7.   method.method(Integer.valueOf(100));  
  8.  }  
  9. }  
  10.   
  11. interface IMethod<t> {  
  12.  void method(T x_obj);  
  13. }  
  14.   
  15. class IMethodImpl implements IMethod<string> {  
  16.   
  17.  @Override  
  18.  public void method(String x_obj) {  
  19.   System.out.println(x_obj);  
  20.  }  
  21. }  
  22. </string></t>  
  1. Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String  
  2.  at sample.IMethodImpl.method(ExceptionAtLine1Zwei.java:1)  
  3.  at sample.ExceptionAtLine1Zwei.main(ExceptionAtLine1Zwei.java:7)  
どう見ても呼ばれるべきメソッドがありませんね。
Genericsを中途半端に使用すると恐ろしいことになる良い例です。

Eclipseで警告が出るようにしておきましょう。
厳しさは易しさです。

0 件のコメント:

コメントを投稿