なんぞこれ><
Javaの型推論Utilsクラス - yukobaのブログ
ってことでやってみた
これは OK
import java.util.ArrayList; import static java.lang.System.out; public class Main { public static <S, T> T cast(S o) { return (T) o; } public static void main(String[] args) { ArrayList a = new ArrayList(); ArrayList<String> b = cast(a); b.add("hoge"); b.add("fuga"); out.println(b); Hoge c = cast(a); // キャストできない場合は実行時例外になる } } class Hoge {}
$ javac -Xlint:unchecked Main.java && java Main
Main.java:7: warning: [unchecked] unchecked cast
found : S
required: T
public static <S, T> T cast(S o) { return (T) o; }
^
1 warning
[hoge, fuga]
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList
at Main.main(Main.java:22)
でもなんでこれはダメ?
import java.util.ArrayList; import static java.lang.System.out; public class Main { public static <S, T> T cast(S o) { return (T) o; } public static void hoge(ArrayList<String> a) { a.add("piyo"); } public static void main(String[] args) { ArrayList a = new ArrayList(); hoge(cast(a)); out.println(a); } }
$ javac -Xlint:unchecked Main.java && java Main
Main.java:6: warning: [unchecked] unchecked cast
found : S
required: T
public static <S, T> T cast(S o) { return (T) o; }
^
Main.java:15: hoge(java.util.ArrayList<java.lang.String>) in Main cannot be applied to (java.lang.Object)
hoge(cast(a));
^
1 error
1 warninghoge の引数の型 ArrayList
まとめ
わからない><