给定一个IP地址范围(a.b.c.d - a.b.c.e)我想要一个方法来返回范围内数组列表中的ip地址。
选项1:
public static int getIPAddressesFromRange(String rangeStr, List list ) ;
返回值为count
,输入列表将填充范围包含的IP列表
选项2:
public static List getIPAddressesFromRange(String rangeStr)
返回值是ip地址列表'
我的选项是2,但这是直觉,但不能支持我的论点。
编辑:选项1是否有违反设计原则?
答案 0 :(得分:5)
我会说
public static List<String> getIPAddressesFromRange(String rangeStr)
如果您决定将IP地址表示为字符串。
反对#1的论据:
null
值将导致NullPointerException。答案 1 :(得分:2)
将选项2添加到选项1。
该列表无论如何都包含其计数,因此无需返回两个值(计数和列表)。
此外,由于您知道列表的类型,因此您可以使用泛型:List<String>
。
最后,您还可以考虑采用两个参数:范围的开头和结尾。
答案 2 :(得分:2)
为什么要在第一种方法中返回计数?您可以从List本身获取IP的数量。
第二种方法应该是首选方法
答案 3 :(得分:2)
你的第二个选择是最好的,因为第一个选项有两个问题:
List
,您可以使用其size()
方法获取该计数,这样您就可以通过返回计数获得任何收益。NullPointerException
的危险。同样在这种情况下,调用者将不会重新分配参数以指向新列表,因此您唯一的远程理智选项是抛出一个明确的异常。使用第二个选项,您可以完全控制列表,直到它返回给调用者。答案 4 :(得分:1)
选项二可能更好,因为任何读者都清楚返回的方法是什么。
方法1可能会使未来的编码人员花时间思考这个参数是什么(除非它被正确记录),而方法2则是直接的。
如果您稍后需要迭代检索到的列表,则选项二也会使它更加整洁,不需要临时变量:
for (Object o : getIPAddressesFromRange(String rangeStr)) { ... }
您还应该更喜欢使用generic type List<>
而不是原始类型。
答案 5 :(得分:1)
选项1改变其输入参数并返回冗余值(count,可以从列表中获取)。
另一件事是,或许一些IP地址可以通过String之外的其他类型更好地描述。
答案 6 :(得分:1)
IMO方法签名表明它会从范围返回一个ip地址列表,而不是该范围内有多少个地址,因此我也选择2。
答案 7 :(得分:1)
我认为第二个更好:
答案 8 :(得分:0)
你的直觉也是我的,最好让getIPAddressesFromRange使用其首选的List实现,并避免有人给你一个已填充的列表。
答案 9 :(得分:0)
我的观点是第二种方法签名通常是最好的,因为第一种方法签名会将您的列表对象暴露给并发修改。因此,在您的方法结束时,它可能会保留比预期更少,更多的其他对象。
答案 10 :(得分:0)
这取决于您是要填充预先创建的列表还是创建新列表。
例如:您可以使用相同的List对象对函数执行多次调用以节省一些内存。
或者:要比较多个列表,您可能希望为每个呼叫返回一个新列表。
我会选择选项2。