は、次のJavaコードでした:スカラ結合型パラメータと反射
public <T extends Enum<T>> T foo(Class<T> clazz) {
return clazz.getEnumConstants()[0];
}
public void bar(Class<?> clazz) {
if (Enum.class.isAssignableFrom(clazz)) {
System.out.println(foo(clazz.asSubclass(Enum.class)));
} else if (String.class.isAssignableFrom(clazz)) {
System.out.println("Meow");
}
}
bar(MyEnum.class) // prints the first value of MyEnum
bar(String.class) // prints Meow
はスカラに変換する:
bar[MyEnum]()
bar[String]()
Enum
はT extends Wrapper[T]
パターンに従うクラスの一例であり、foo
単にクラスの名前を返すだけでした(または、私の "Wrapper
"クラスでのみ利用可能な反射データを必要とする他の種類のロジックを実行することもできます)。
TypeTag
でScalaで動作させようとしましたが失敗しました。私はこのようなコンパイルエラーのすべての並べ替えを持って:すべてがコンパイル時に解決されるように、あなたは、型クラスのアプローチを試すことができます
私はちょうど "リテラル翻訳"で私の答えを編集していたが、それを投稿したので、私はあなたにそれを残すだろう:実在のタイプの+1、おそらくそれは彼が知りたかったものだ –
はい!同様のことを試しましたが、 'asInstanceOf'には単純な' Class [_ <:Enum [_]] '(実際には' Class'を必要とするJavaメソッドが呼び出されています)がありましたが、 (ここで説明されているように(http://www.drmaciver.com/2008/03/existential-types-in-scala))、私はそれを修正するのが面倒です:p –