2011年3月31日木曜日

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

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

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

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

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

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

Genericsを ”利用して” エラーを吐く方法
package sample;

public class ExceptionAtLine1Zwei {

 public static void main(String[] x_args) {
  IMethod method = new IMethodImpl();
  method.method(Integer.valueOf(100));
 }
}

interface IMethod {
 void method(T x_obj);
}

class IMethodImpl implements IMethod {

 @Override
 public void method(String x_obj) {
  System.out.println(x_obj);
 }
}
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
 at sample.IMethodImpl.method(ExceptionAtLine1Zwei.java:1)
 at sample.ExceptionAtLine1Zwei.main(ExceptionAtLine1Zwei.java:7)
どう見ても呼ばれるべきメソッドがありませんね。
Genericsを中途半端に使用すると恐ろしいことになる良い例です。

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

0 件のコメント:

コメントを投稿