有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何为特殊情况提供更简单的构造函数

我想知道我所努力实现的目标是否真的可能,我不知道我所做的事情的确切名称,因此我不能真正正确地用谷歌搜索结果,为什么这个主题标题也有点模糊

我的班级:

会计约束。爪哇:

package dao.constraint;

public class AccountConstraint {
    private Range<Integer> accountId;
    private String username;
    private String password;
    private String email;

    public AccountConstraint(final Range<Integer> accountId, final String username, final String password, final String email) {
        this.accountId = accountId;
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public Range<Integer> getAccountId() {
        return accountId;
    }

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }

    public String getEmail() {
        return email;
    }
}

射程。爪哇:

package dao.constraint;

public class Range<T> {
    private T min;
    private T max;

    public Range(T min, T max) {
        this.min = min;
        this.max = max;
    }

    public T getMin() {
        return min;
    }

    public T getMax() {
        return max;
    }
}

一个完全有效的代码示例是:

AccountConstraint ac = new AccountConstraint(new Range<Integer>(5, 10), null, null, null));

如果您想获取id为5到10的所有帐户。一段仍然有效但更奇怪的代码是:

AccountConstraint ac = new AccountConstraint(new Range<Integer>(3, 3), null, null, null));

如果您想获得id为3的帐户

我想要的是:

AccountConstraint ac = new AccountConstraint(3, null, null, null);

asnew Range<Integer>(3, 3)理论上等于3

有没有办法做到这一点,可能是通过向Range类添加代码,我觉得这应该是可能的,但我不知道如何和/或从哪里开始


共 (6) 个答案

  1. # 1 楼答案

    您可以尝试以下方法(创建新的重载构造函数):

    public AccountConstraint(final Range<Integer> accountId, final String username, final String password, final String email) {
          this.accountId = accountId;
          this.username = username;
          this.password = password;
          this.email = email;
    }
    
    //new overloaded constructor
    public AccountConstraint(Integer value, final String username, final String password, final String email) {
          Range<Integer> accountId = new Range(value,value);
          super(accountId , username, password, email));
    }
    
  2. # 2 楼答案

    创建更多构造函数:

    public AccountConstraint(Integer accountId, final String username, final String password, final String email) {
        this.accountId = new Range<Integer>(accountId);
        this.username = username;
        this.password = password;
        this.email = email;
    }
    
    public Range(T num) {
        this.min = num;
        this.max = num;
    }
    
  3. # 3 楼答案

    创建这样的构造函数。将值传递给构造函数

       public AccountConstraint(Integer i, final String username, final String password, final String email) {
                this.accountId = new Range<Integer>(i,i)
                this.username = username;
                this.password = password;
                this.email = email;
            }
    
  4. # 4 楼答案

    您可以更改Range类以添加单个参数构造函数:

    public Range(T t) {
        min = t;
        max = t;
    }
    

    并在单独的AccountConstraint构造函数中调用该构造函数


    顺便说一句,您的Range类可能受益于某些类型边界:

    public class Range<T extends Comparable<T>> {
        public boolean contains(T value) {
            return value.compareTo(min) >= 0 
              && value.compareTo(max) <= 0;
        }
        // rest of class the same 
    }
    
  5. # 5 楼答案

    您不需要对Range类做任何事情,只需提供另一个AccountConstraint构造函数,它从一个int中生成一个Range

    public AccountConstraint(final int accountId, final String username, final String password, final String email) {
        this(new Range<Integer>(accountId, accountId), username, password, email);
    }
    
  6. # 6 楼答案

    添加以整数作为第一个参数的构造函数,并使用它创建一个范围:

    public AccountConstraint(Integer accountId, final String username, final String password, final String email) {
        this(new Range<Integer>(accountId, accountId), username, password, email);
    }