使用特定参数显示冲突的Java标准注释

时间:2017-03-11 18:52:11

标签: java

方法有一些输入参数,可能的选项存储在所有参数的相关enums中。但是使用argument1的特定可能选项以及argument2的特定选项会导致冲突。如何向其他开发人员发出警告以避免这种情况?

修改

我想在他们想要使用这些选项时警告他人。例如,当您想要使用已弃用的方法

2 个答案:

答案 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;
}