特定のクラスのインスタンスのストレージを検索するメソッドがあります。
def lookup[T >: Null: ClassTag]: T = {
// Print what class tag we got:
System.out.println(implicitly[ClassTag[T]].toString);
null; // details omitted, just return null
}
それはうまく機能しますが、問題は、明示的な型を指定しないと、コンパイラが for を選択Null
しT
、もちろん機能しないことです。
def print(msg: String) = { /* ... */ }
print(lookup);
印刷Null
され、もちろん何も見つかりません。明らかに、コンパイラは可能な限りジェネリック性の低い型を推論します。
次のような明示的なタイプを追加すると
print(lookup[String]);
それは正常に動作します。しかし、これは非常にエラーが発生しやすいです。次のいずれかを行います。
- コンパイラが、可能な限り一般的でない型ではなく、可能な限り最も一般的な型を常に選択するようにします。したがって
print(lookup)
、最も一般的な可能な型はであるため、コンパイラに を推論さString
せたいと思います。またはString
T
- 何らかの形で明示的な型が常に存在するように強制し、
print(lookup)
.
これは可能ですか?