假设我有一个这样的类和方法:
public class Example {
private final Map<String, Object> stuff = new HashMap<>();
public <T> T getValue(String key) {
return (T) stuff.get(key);
}
}
是否可以强迫某人编写调用getValue()
的代码来显式地为方法调用提供类型见证?
Example example = new Example();
Boolean resultWithParameter = example.<Boolean>getValue("some_key");
我想做的就是在调用方法时总是需要参数。有没有办法做到这一点?我知道我总是可以添加一个Class
参数,但是我正在探索其他选项。
答案 0 :(得分:1)
没有一种方法可以强制执行。这是方法调用as defined by the JLS的结构。
MethodInvocation:
MethodName ( [ArgumentList] )
TypeName . [TypeArguments] Identifier ( [ArgumentList] )
ExpressionName . [TypeArguments] Identifier ( [ArgumentList] )
Primary . [TypeArguments] Identifier ( [ArgumentList] )
super . [TypeArguments] Identifier ( [ArgumentList] )
TypeName . super . [TypeArguments] Identifier ( [ArgumentList] )
ArgumentList:
Expression {, Expression}
具体来说,您的示例涉及到此
Primary . [TypeArguments] Identifier ( [ArgumentList] )
example . <Boolean> getValue ( "some_key" );
如果您不熟悉the notation,则最重要的部分是:
产品右侧的语法
[x]
表示零或 x的一次出现。也就是说,x
是一个可选符号
因此,在[TypeArguments]
(类型见证人)适用的情况下,它始终是可选的;没有办法强制它存在。