Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法确定返回SortedSet的方法的返回类型_Java_Naming - Fatal编程技术网

Java 无法确定返回SortedSet的方法的返回类型

Java 无法确定返回SortedSet的方法的返回类型,java,naming,Java,Naming,我应该创建一个类,它应该是一个值区间的容器(就像在数学中一样)。我已经决定在内部使用SortedSet 我要实现的事情之一是一个方法,它“获取一个包含区间中所有元素的有序集” 类间隔{ private SortedSet SortedSet=新事物(); ... } 我的问题在于方法的返回类型和名称应该是什么。出现了几个假设: SortedSet getSortedElements()我在内部使用的是分类数据集,因此我应该返回该类型。我应该在方法的名称中声明该意图 SortedSet getE

我应该创建一个类,它应该是一个值区间的容器(就像在数学中一样)。我已经决定在内部使用
SortedSet

我要实现的事情之一是一个方法,它“获取一个包含区间中所有元素的有序集”

类间隔{
private SortedSet SortedSet=新事物();
...
}
我的问题在于方法的返回类型和名称应该是什么。出现了几个假设:

  • SortedSet getSortedElements()我在内部使用的是
    分类数据集
    ,因此我应该返回该类型。我应该在方法的名称中声明该意图
  • SortedSet getElements()
    我在内部使用了一个
    SortedSet
    ,但是在方法名中没有必要说明这一点(我看不出这有什么大的意义)
  • Set getElements()我应该尝试始终返回最基本的类型,因此我将返回一个集合。通过契约和方法的定义,人们已经知道所有元素都是有序的
    
  • Set getSortedElements(),同上。关于方法名,您清楚地说明了这个方法将返回什么:一组经过排序的元素

  • 我倾向于使用
    4.
    ,但其他的似乎也不错。有明确的赢家吗?为什么?

    我认为返回一个
    集合是维护性的正确方法-但是我不喜欢任何方法名称。为什么不做一些更具描述性的事情,比如:

    Set getIntervalValues();
    

    或者类似的东西。

    我认为返回一个
    集合是实现可维护性的正确方法,但是我不喜欢任何方法名称。为什么不做一些更具描述性的事情,比如:

    Set getIntervalValues();
    

    或者与之相关的东西。

    SortedSet
    是与合同的接口,用于对元素进行排序。它还公开了一些在
    Set
    中不可用的方法(例如
    first()
    )。如果您应该返回一个遵循该约定的对象(例如,在iterator()上返回有序值),那么您应该返回一个
    排序集
    。如果不是,则应返回一个
    集合
    (或
    集合

    您可以根据希望结果的使用方式来确定返回的内容。首先想想“获取一个包含区间中所有元素的有序集”意味着什么,然后再考虑实现

    顺便说一下,代码

    private SortedSet sortedSet = new SortedSet();
    

    是非法的,因为
    SortedSet
    是一个接口。由于这是作业,我将把它留给您,让您来找出这是一个问题的原因。

    SortedSet
    是一个与合同的接口,用于对元素进行排序。它还公开了一些在
    Set
    中不可用的方法(例如
    first()
    )。如果您应该返回一个遵循该约定的对象(例如,在iterator()上返回有序值),那么您应该返回一个
    排序集
    。如果不是,则应返回一个
    集合
    (或
    集合

    您可以根据希望结果的使用方式来确定返回的内容。首先想想“获取一个包含区间中所有元素的有序集”意味着什么,然后再考虑实现

    顺便说一下,代码

    private SortedSet sortedSet = new SortedSet();
    

    是非法的,因为
    SortedSet
    是一个接口。因为这是家庭作业,所以我将把它留给您,让您找出这是一个问题的原因。

    如果该方法应该返回一个SortedSet,那么它应该是该方法的返回类型。调用者可以将结果分配给SortedSet或Set,这取决于他们是否关心排序。 如果您的方法javadoc或name暗示您返回一个排序集,但您的方法返回类型仅为set,这就像告诉您的水管工您将为他的服务支付100美元,但在合同中写下您将“至少支付50美元”

    通过返回SortedSet
    1) 您正在向您的客户承诺,您正在并且将返回一个排序集。如果不破坏客户的代码(无法编译),则无法更改该合同(设置)。
    如果相反地设置了方法返回类型,那么无论您在javadoc或方法名称中向客户机/调用者承诺了什么,您仍然可以随时更改实现以返回未排序的集。如果设置了返回类型,并且调用者想要SortedSet功能,他们可以将返回的值强制转换为SortedSet(丑陋),但是有一天如果您决定只返回一个未排序(静止)的集合,调用者代码将在运行时中断(对您的客户来说非常危险。假设您的客户代码运行正常,然后他们升级您提供的库…。

    2) 调用者可能需要一组经过排序的结果。如果您返回Set,他们可能会试图对您的结果重新排序(您是否希望要求读取您的javadoc?)。如果您返回SortedSet,他们知道不需要重新排序。

    如果该方法应返回SortedSet,则应为该方法的返回类型。调用者可以将结果分配给SortedSet或Set,这取决于他们是否关心排序。 如果您的方法javadoc或name暗示您返回一个排序集,但您的方法返回类型仅为set,这就像告诉您的水管工您将为他的服务支付100美元,但在合同中写下您将“至少支付50美元”

    通过返回SortedSet
    1) 您正在向您的客户承诺,您正在并且将返回一个排序集。如果不破坏客户的代码(无法编译),则无法更改该合同(设置)。
    如果相反地设置了方法返回类型,那么无论您在javadoc中或以方法的名称向客户机/调用者承诺什么,您仍然可以随时更改实现以返回