【发布时间】:2018-06-04 04:43:26
【问题描述】:
给定一个像这样的通用接口(这不是我的实际情况,但作为一个最小的例子):
/** Generic interface for unary functions on strings. */
public interface StringTransformer {
/**
* Transform the given non-null string.
* @param x string to be transformed
* @return transformed string
* @throws NullPointerException if x is null
*/
String apply(String x);
}
假设我有一个实现返回一个常量值,而不管传递的参数如何:
public class EmptyAllStrings implements StringTransformer {
public String apply(String x) {
return "";
}
}
我的疑问是,如果参数是 null,添加检查以抛出 NPE 是否是个好主意,即使在这种情况下无关紧要。
public String apply(String x) {
Objects.checkNotNull(x);
return "";
}
反对检查的要点:
-
null可用于已知使用的特定类的情况 - 更少的代码
支持检查的要点:
- 有效地兼容接口 javadoc
- 即使使用了
null-resilient 类,也可能有助于发现null相关的错误
在这种情况下,是否有或多或少的“权威”指南建议两种选择之一?
【问题讨论】:
-
应删除未使用的参数
-
@Stultuske 如果你想实现一个接口,不要这样做。
-
@daniu 那么该接口应该具有不带参数的方法。这有点像把 setSpeed(int speed);在接口中,在实现中 setSpeed(int speed) { /* 在这里做什么? */ }。当然,它有效,但它是好的设计吗?
-
我们不是在谈论 setSpeed(int speed),我们在谈论
String apply(String x),您显然无法删除该参数,因为存在一个不是很有用的实现,它没有' t 使用参数。 -
@Stultuske 你在争论
Consumer<String>应该包含一个方法accept()?
标签: java nullpointerexception null