方法有一些输入参数,可能的选项存储在所有参数的相关enums
中。但是使用argument1
的特定可能选项以及argument2
的特定选项会导致冲突。如何向其他开发人员发出警告以避免这种情况?
修改
我想在他们想要使用这些选项时警告他人。例如,当您想要使用已弃用的方法
时答案 0 :(得分:0)
假设我们有方法doSmth(Enum1,Enum2),并使用选项A,B,C和Enum2枚举Enum1,选项X,Y,Z和Enum1.A与Enum2.Z不兼容,我认为它会制作4个枚举更可靠:
Enum11 {A,B,C},Enum21 {X,Y}, Enum12 {B,C},Enum22 {X,Y,Z}
并且有两个重载版本的方法doSmth:
doSmth(Enum11,Enum21), doSmth(Enum12,Enum22)。
这些可以组织成两个子类或实现,例如根据战略模式。
是的,它会使您的代码更加冗长,但这样一来,您的方法的用户根本无法提供不兼容的参数对。我认为这比强迫他们在搜索角柜中筛选文档更好。
答案 1 :(得分:0)
检查参数(尤其是构造函数的参数)并抛出IllegalArgumentException
(如果传递了一个不允许的值或组合)是很常见的。例如,考虑这个构造函数:
public DateRange(Date start, Date end) {
}
我会至少添加这样的支票(以及记录允许的内容):
/**
* Constructs a new instance.
*
* @param start the start date, cannot be null and must be smaller than the end date
* @param end the end date, cannot be null and must be larger than the start date
*/
public DateRange(LocalDate start, LocalDate end) {
if (start == null) {
throw new IllegalArgumentException("start cannot be null");
}
if (end == null) {
throw new IllegalArgumentException("end cannot be null");
}
if (!start.before(end)) {
throw new IllegalArgumentException("start must be before end");
}
this.start = start;
this.end = end;
}