如何将一些特殊值添加到整数类型

时间:2019-10-14 09:52:29

标签: java

我想创建一个Java类,该类除了具有整数类型之外,还允许具有一些Enums(即特殊值),有点像Double。

考虑要记住整数0、1,100、1000或特殊值(例如“ 0000”或“ /”或“ VAR”)的情况;

2 个答案:

答案 0 :(得分:0)

我想您的课程必须包含那些类型?如:

public class ExampleClass 
{ 
    // Instance Variables 
    int intTypeVar; 
    String stringTypeVar; 
    double doubleTypeVar; 


    // Constructor Declaration of Class 
    public ExampleClass (int intTypeVar, String stringTypeVar, 
                   double doubleTypeVar) 
    { 
        this.intTypeVar= intTypeVar; 
        this.stringTypeVar= stringTypeVar; 
        this.doubleTypeVar= doubleTypeVar; 

    } 

答案 1 :(得分:0)

您可以这样创建自己的专有类型:

public class State {
  JUST_AN_INTEGER,
  CHEESE,
  SOMETHING_ELSE;
}

public final class MyInteger {
  private final int value;
  private final State state;

  private MyInteger(int value) {
    this.value = value;
    this.state = State.JUST_AN_INTEGER;
  }

  private MyInteger(State state) {
    if (state == null) {
      throw new IllegalArgumentException("State must be non-null");
    } else if (state == State.JUST_AN_INTEGER) {
      throw new IllegalArgumentException(State.JUST_AN_INTEGER + " requires a value!");
    }
    this.state = state;
  }

  public int getValue() {
    if (state != State.JUST_AN_INTEGER) {
      throw new IllegalStateException("MyValue has no value, it is of state " + state");
    }
    return value;
  }

  public int getState() {
    return this.state;
  }

  @Override
  public int hashCode() {
    return this.value ^ this.state.hashCode();
  }

  @Override
  public int equals(Object o) {
    if (!(o instanceof MyInteger)) {
      return false;
    }
    MyInteger other = (MyInteger) o;
    return other.state == this.state && other.value == this.value;
  }

  @Override
  public String toString() {
    if (this.state == State.JUST_AN_INTEGER) {
      return String.valueOf(this.value);
    }
    return this.state.name();
  }
}

MyInteger可以具有正常整数值,也可以是其他状态之一。构造函数确保仅以一致的方式进行构造(例如,您不希望没有显式值的JUST_AN_INTEGER构造,并且同样,您不希望CHEESE状态也包含一个值) )。

可以也实现Number类,但这将导致各种令人困惑的行为,因为在许多情况下,它的行为不像普通的Number