Java 独特的类型?

Java 独特的类型?,java,class,types,unique,Java,Class,Types,Unique,每个电话号码的类型必须是唯一的。它们必须存储为两个字段:电话类型(工作、家庭、手机)和号码。 如何用java编写这样的类? 下面的解释是否正确 public class PhoneNumber { private int number; private String type; public PhoneNumber(int number1,String type1){ setNumber(number1); setType(type1); } 您可以执行以下操

每个电话号码的类型必须是唯一的。它们必须存储为两个字段:电话类型(工作、家庭、手机)和号码。 如何用java编写这样的类? 下面的解释是否正确

public class PhoneNumber {

   private int number;
   private String type;

public PhoneNumber(int number1,String type1){

    setNumber(number1);
    setType(type1);
}

您可以执行以下操作:

public class PhoneNumber {

    private int number;
    private String type;

    public static Map<Integer, PhoneNumber> knownNumbers = new HashMap<Integer, PhoneNumber>();

    public PhoneNumber(int number1,String type1) throws AlreadyExistsNumberException{
        validate(number1);
        this.number = number1;
        this.type = type1;

        knownNumbers.put(number, this);
    }



    private void validate(int number1) {
        if(knownNumbers.get(number1) != null){
            throw new AlreadyExistsNumberException("The number "+number1+" already exists");
        }
    }
}
当然,有几种方法可以解决这个问题,你也可以用一个静态方法来检查它,用一个布尔方法来看看它是否已经存在,等等

编辑

另一种选择:

public class PhoneNumber {

    private int number;
    private String type;

    public static Map<Integer, PhoneNumber> knownNumbers = new HashMap<Integer, PhoneNumber>();

    public PhoneNumber(int number1,String type1){
        this.number = number1;
        this.type = type1;

        knownNumbers.put(number, this);
    }

    private static boolean validate(int number1) {
        return (knownNumbers.get(number1) == null);
    }
}

您可以执行以下操作:

public class PhoneNumber {

    private int number;
    private String type;

    public static Map<Integer, PhoneNumber> knownNumbers = new HashMap<Integer, PhoneNumber>();

    public PhoneNumber(int number1,String type1) throws AlreadyExistsNumberException{
        validate(number1);
        this.number = number1;
        this.type = type1;

        knownNumbers.put(number, this);
    }



    private void validate(int number1) {
        if(knownNumbers.get(number1) != null){
            throw new AlreadyExistsNumberException("The number "+number1+" already exists");
        }
    }
}
当然,有几种方法可以解决这个问题,你也可以用一个静态方法来检查它,用一个布尔方法来看看它是否已经存在,等等

编辑

另一种选择:

public class PhoneNumber {

    private int number;
    private String type;

    public static Map<Integer, PhoneNumber> knownNumbers = new HashMap<Integer, PhoneNumber>();

    public PhoneNumber(int number1,String type1){
        this.number = number1;
        this.type = type1;

        knownNumbers.put(number, this);
    }

    private static boolean validate(int number1) {
        return (knownNumbers.get(number1) == null);
    }
}

您不应将
ints
用于您的电话号码。首先,电话号码是10位数字(都是正数),因此很容易超过
int
的容量。另一方面,电话号码不是整数。。。你永远不会用电话号码加、减、乘

下面是它的外观:

public enum PhoneType { ... // fill in the possible phone types
}

public static final EnumMap<PhoneType, Set<String>> phoneNumbers = new EnumMap<PhoneType, Set<String>>(); 
public enum PhoneType{…//填写可能的电话类型
}
公共静态最终EnumMap PhoneNumber=新EnumMap();

您可能希望围绕这些
DT
s构建一些控件来获取/设置电话号码,但这应该可以让您开始

您不应该对电话号码使用
int
。首先,电话号码是10位数字(都是正数),因此很容易超过
int
的容量。另一方面,电话号码不是整数。。。你永远不会用电话号码加、减、乘

下面是它的外观:

public enum PhoneType { ... // fill in the possible phone types
}

public static final EnumMap<PhoneType, Set<String>> phoneNumbers = new EnumMap<PhoneType, Set<String>>(); 
public enum PhoneType{…//填写可能的电话类型
}
公共静态最终EnumMap PhoneNumber=新EnumMap();


您可能希望围绕这些
DT
s构建一些控件来获取/设置电话号码,但这应该可以让您开始

您的数据模型应该独立于用户输入的约束。最好将这种验证检查放在另一个级别(例如,当您将值插入集合或其他数据存储时)。顺便说一句,电话号码不是,也永远不会是一个实际的数字。类型也可以是一个枚举。就目前而言,这个问题没有提供足够的信息,而且范围太广。您如何保持唯一性以及如何创建新的
PhoneNumber
s?您在哪里确保电话号码字段的唯一性?如果它在setters中,请为它们提供代码。电话号码不应存储为整数;使用字符串。
PhoneNumber
及其类型和编号是一段数据。根据业务规则,电话号码在类型中应该是唯一的,因此该约束不属于PhoneNumber类。您的数据模型应该独立于用户输入周围的约束。最好将这种验证检查放在另一个级别(例如,当您将值插入集合或其他数据存储时)。顺便说一句,电话号码不是,也永远不会是一个实际的数字。类型也可以是一个枚举。就目前而言,这个问题没有提供足够的信息,而且范围太广。您如何保持唯一性以及如何创建新的
PhoneNumber
s?您在哪里确保电话号码字段的唯一性?如果它在setters中,请为它们提供代码。电话号码不应存储为整数;使用字符串。
PhoneNumber
及其类型和编号是一段数据。根据业务规则,电话号码在类型中应该是唯一的,因此该约束不属于PhoneNumber类。我认为这与问题无关,因为问题本质上是“如何创建表示联系人电话号码的类?”。我认为这与问题无关。这是非常相关的,因为问题本质上是“我如何创建一个代表联系人电话号码的类?”。我知道对于异常用法存在争议,但对我来说,如果我们基于java文档,它们适合这个问题。。。“异常是在程序执行过程中发生的一个事件,它会中断正常的指令流。”在我看来,这可以被认为是这种情况。@Makoto使用非异常选项编辑。我知道异常用法存在争议,但对我来说,它们与问题相符,如果我们基于java文档。。。“异常是指在程序执行过程中发生的事件,它会中断正常的指令流。”在我看来,这可以被认为是这种情况。@Makoto使用非异常选项进行编辑