Java类正确使用方法的设计

Java类正确使用方法的设计,java,Java,我正在设计一个叫做interval的类 到目前为止,我有两个字母大写和小写 现在,我将如何在默认情况下打开间隔。我以为默认构造函数在这里就可以了 注:我还没有写代码,我现在只考虑设计不知道需求,只能猜测。 假设您有一个整数类型的下限和上限,您可以将它们声明为整数,并最初允许它们为null。然后提供构造函数、getter/setter来设置值(如果要对其进行绑定): public class Interval{ Integer lowerBound = null; Integer

我正在设计一个叫做interval的类

到目前为止,我有两个字母大写和小写

现在,我将如何在默认情况下打开间隔。我以为默认构造函数在这里就可以了


注:我还没有写代码,我现在只考虑设计

不知道需求,只能猜测。 假设您有一个整数类型的下限和上限,您可以将它们声明为整数,并最初允许它们为null。然后提供构造函数、getter/setter来设置值(如果要对其进行绑定):

public class Interval{
    Integer lowerBound = null;
    Integer upperBound = null;

    public Interval(){
        super();
    }

    public Interval(Integer lower, Integer upper){
        setLowerBound(lower);
        setUpperBound(upper);
    }

    public void setLowerBound(Integer lower){
        this.lowerBound = lower;
    }

    public void setUpperBound(integer upper){
        this.upperBound = upper;
    }

    public boolean isLowerBounded(){
        return (lowerBound == null) ? false: true;
    }

    public boolean isUpperBounded(){ 
        return (upperBound == null) ? false: true;
    }
}

因为它是一个区间类,我想你会比较一个值是否在区间内。因此,间隔中的每个边点可以有3种状态。它可以

  • 精确到某一点
  • 无限接近一点(3,或
  • 是无限的,或者更确切地说是未定义的
  • 我建议制作一个包含以下值的通用类:

    • upperValue
    • lowerValue
    • isUpperBounded (boolean)
    • isLowerBounded (boolean)
    

    然后,你需要知道一个点是否在区间内所需的逻辑。如果有一个值是有界的,你会使用包容性比较
    =你能发布一些代码吗?我还没有写代码,我只是在设计它。这是一个迄今为止称为区间的类。我有两个上下属性。我只想知道如何制作一个Iinterval按默认值打开您可以使边界为空以指示打开的间隔。此外,您可能希望为
    [
    vs
    )设置布尔标志(如果在您的域中有意义的话)。我根本不会使用构造函数。将其保留为内部的且
    私有的
    。使用命名良好的
    静态
    工厂方法,这样您就可以调用
    内部的.open(3,7)
    Interval.closed(3,7)
    。您甚至可以将其扩展到流体生成器,例如
    Interval.lowerInclusive(3).upperExclusive(7).build()
    @dlcole什么?你的评论毫无意义。你似乎把
    静态
    状态与
    静态
    方法工厂模式混淆了。事实上,这种工厂模式是创建可读构造函数的首选方法。请参阅和Java 8。教条主义地避免不理解的事情会导致糟糕的代码不喜欢这样。似乎没有任何合理的理由让内部可变。这段代码没有任何验证,也不能因为可变。还有-为什么要随机调用
    super()
    ?好吧,根据提供的大量需求,您可以将其称为一个简单的示例。是否有理由使其可变?目前谁知道呢。就随机调用super()而言,它几乎不是随机的。如果您不声明构造函数,这正是您得到的结果-一个调用super()的默认构造函数。此外,如果希望使用默认构造函数,则添加对super()的调用将支持将来决定扩展默认构造函数将委托的超类的情况。首选不可变对象。它们更易于推理。问题应该是“是否有理由使其可变”-这里的答案是否定的,因为可变性引入了大量的验证问题。至于你评论的第二部分-你似乎有一个基本的误解。Java编译器总是会添加对
    super()的调用
    作为构造函数中的第一项,它不调用另一个构造函数或超类构造函数。将其添加到构造函数中显式地暴露了对基本继承概念的理解不足……是的,我同意你喜欢不可变对象,你在这一点上说得对。在你的第二条评论中,你太苛刻和鲁莽了。更具体地说,regarding adding the default constructor(添加默认构造函数):在添加自定义构造函数的情况下,如果需要默认构造函数,则必须提供自己的构造函数。根据我的经验,在执行此操作时,最好添加对super的调用,因为默认构造函数通常稍后会被修改,而对super()的调用将被忽略,没有意识到一旦在构造函数中添加另一行代码,就会丢失对super()的免费调用。我不理解您在重新调用super时的评论。默认超类构造函数存在并被自动调用,或者它不存在且您有编译器错误。没有任何理由显式调用它。
    public class ClosedInterval extends Interval