我有一个方法可以为特定类的实例查找一些存储:
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
}
它工作得很好,但问题是如果我不提供显式类型,编译器会选择Null
for T
,当然它不起作用:
def print(msg: String) = { /* ... */ }
print(lookup);
打印Null
,当然什么也没找到。很明显,编译器推断出尽可能少的泛型类型。
如果我添加一个显式类型
print(lookup[String]);
它工作正常。但这很容易出错。我想:
- 让编译器始终选择最通用的类型,而不是最不通用的类型。所以
print(lookup)
最通用的可能类型是String
,所以我希望编译器推断String
.T
或者 - 以某种方式强制始终存在显式类型,并在我编写类似
print(lookup)
.
这有可能吗?