java 类的方法设计_设计问题:Java类与单方法OK?

我需要以下功能

Given two sorted lists, merge them

我有这个骨架Java代码:

public class MergeLists{

public List merge(List l1, List l2){

List l3;

// merge l1, l2 in to l3

return l3;

}

public static void main(){

// populate list1 and list2

MergeLists ml = new MergeLists();

List l3 = ml.merge(l1,l2);

}

}

这个方法类是正确的方法吗?我觉得几乎空无一人的班级正盯着我说这是个糟糕的设计。我最初把列表L3作为合并列表的私有成员,但后来我想,合并(l1,l2)可以用同一个对象多次调用,这要求l3是本地的才能合并(l1,l2)。我读到使用静态方法对代码的可重用性更糟糕。请告知。谢谢您。

很好。但我预测,一旦该类位于您的源代码库中,它将意外地开始增长其他方法。有一天,您希望合并两个以上的列表,因此它会为之增加一个方法。然后你想将一个列表合并到另一个列表中而不创建第三。然后,您需要排序,然后合并一些列表。很快,合并方法就不那么孤独了!

你可以这样做,但我认为你希望merge方法是static方法。这将确保在调用方法之前不必实例化它。你可以这样做:

List l3 = MergeLists.merge(l1,l2);

另外,如果这是唯一的方法,并且是静态的,那么可以使类abstract,这意味着它不能被实例化。

…或使构造函数私有

没有构造函数。

我通常会使我的Util类成为最终类,并添加一个唯一的私有的no-op构造函数。这是为了禁止实例化和派生。

当然有:)隐含的。

请解释如何使隐式构造函数私有。提示:您可以通过向类中添加某个关键字来模拟这一点。

在这种情况下,由于没有真正的成员数据,将单个方法作为类内的静态方法将是适当的设计选择:

public class ListUtils

{

public static List Merge(List l1, Listl2)

{

List l3 = new List();

// merge l1 and l3 into l3

return l3;

}

}

然后,您可以使用代码而不必创建类的实例(尤其是当它没有任何用途时):

List l1 = new List();

List l2 = new List();

// Fill the lists

List merged = ListUtils.Merge(l1, l2);

在Java中不能拥有顶级静态类。

@再见-对不起。关键字快乐。固定的。

谢谢贾斯汀和埃里克。我试图将静态方法与选择的这个问题的答案协调起来,这个问题本质上说使用静态是一个坏主意:stackoverflow.com/questions/205689/…

@用户426716-注意公认的答案"只有西斯才是绝对的"。他提到,在某些情况下,只有静态方法的类是有意义的。你的案子就是其中之一。

谢谢你,贾斯廷。

@Justin+1用于星球大战参考^^

问题陈述:

Given two sorted lists, merge them

如何进行设计?-从分析问题陈述开始。哦,它有"列表"-名词-它有一个动作"合并"

所以"合并"是对列表对象执行的操作。所以它应该是列表的一部分。

由于存在特定语言Java的约束,WHO库已经具有列表类,需要创建另一个My.ExpLo.list吗?

进行方法合并(my.example.list其他列表)

myFirstList.merge(mysecondList)

如果要合并多个列表以创建另一个新列表,可以设计一个使用var args mylistutil static list getmergedlist(list…列表列表)

如果您的问题是"我想合并两个列表"(这可能不是"设计"问题),那么解决方案可能是"使用已经具有该功能的XYZ实用程序类"。

静态方法不一定是坏的——它只取决于使用它们的上下文。出现这种情况的例子:

File.separator; // a static representation of the file separator for your platform.

File.listRoots();  // list root filesystems

现在,仅仅应用listutils的情况已经被讨论过了(请参阅其他答案),但是,您可能会做得更多,例如:

class SortedList implements List

如果所有添加的项都自动排序到适当的位置,那么对于静态项来说就没有意义了,因为您希望结果存储在此实例中。如果在Eclipse下尝试这个方法,您会发现无论如何都需要覆盖相当多的方法,包括add和addAll,这相当于merge。

所以,我想说,这取决于你长期以来在做什么,以及物体应该如何动作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值