我正在设计界面如下:
public interface Parameters {
public <T> T getValue(ParameterName pn, Class<T> valueType) throws ClassCastException;
}
如果要返回的值的ClassCastException
实例不是作为参数传递的Class
的{{3}},则实现有义务抛出Class
。
它能成为sesnse吗?它提供了编译时类型安全性,但我们可以通过显式强制转换来完成相同的操作。
或者宣布只是
要好得多public Object getValue(ParameterName pn)
将所有类别转换问题留给客户。
答案 0 :(得分:2)
我已经使用了这种形式的API,我添加了将类型转换为所需类型的功能。例如如果它是一个字符串,但你需要一个整数,它将尝试解析它。
否则,正如您所建议的那样,这种方法并没有增加太多。
public <T> T getValue(ParameterName pn);
这避免了需要明确的演员。
答案 1 :(得分:2)
通过将预期返回类型的Class
对象作为参数传递,您获得任何编译时类型安全性是一种误解。如果客户端传递错误类型的Class
,则只会在运行时检测到错误。
但我认为带Class
参数的设计还有其他优点:
Class
参数,并在用户出错时提供具体且有意义的错误消息。我可以想到这种设计的两个缺点: