我需要以下功能

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。

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

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

  1. java final类为什么不能继承_浅谈Java之终止继承:Final类和Fianl方法

    前言 关键字Final不仅可以用来修饰变量,而且对类及其方法的继承也有很大的影响,本文将从类与方法两个方面介绍final关键字的功能. Final类 当关键字final用来修饰类时,其含义是该类不能再 ...

  2. java mbean获取堆信息_实时取得虚拟机类信息、内存信息、MXBean的使用方法

    import java.lang.management.ClassLoadingMXBean; import java.lang.management.ManagementFactory; impor ...

  3. python设计_设计和历史常见问题

    Guido van Rossum 认为使用缩进进行分组非常优雅,并且大大提高了普通Python程序的清晰度.大多数人在一段时间后就学会并喜欢上这个功能. 由于没有开始/结束括号,因此解析器感知的分组与 ...

  4. java按两列输出_有没有一种简单的方法可以将两列输出到Java中的控制台? - java...

    如标题所述,是否有一种简单的方法可以将两列输出到Java中的控制台? 我知道\t,但是在使用printf时,我还没有找到基于特定列进行空间分配的方法. 参考方案 使用宽度和精度说明符,将其设置为相同的 ...

  5. java类验证和装载顺序_深度分析Java的ClassLoader机制(源码级别)

    原文地址:https://dwz.cn/AztGFkO7 作者:Hollis Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文 ...

  6. java 发送短信 多通道_一种Java卡多通道临时对象管理方法与流程

    本发明涉及Java智能卡领域,具体涉及一种Java卡多通道临时对象管理方法. 背景技术: :JavaCard规范支持逻辑通道的概念,允许最多智能卡中的16个应用程序会话同时开启,每个逻辑通道一个会话. ...

  7. java随机抽题系统_在用java做一个在线考试系统,随机抽题遇到了问题,我写了一个随机抽题的方法,不知道在asp按钮中怎么用...

    你们看看方法对不对?publicListsuiji(intshitiId,inttimuId,inttimunanyidu,StringtimuLeixing){Stringsql="fro ...

  8. 智能家居数据库设计_设计更智能的数据表

    智能家居数据库设计 重点 (Top highlight) Data tables are hard. There are many different ways to think about them ...

  9. java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class

    一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...

最新文章

  1. lede旁路由作用_关于电容的旁路与去偶总结
  2. NYOJ 613 免费馅饼
  3. EOS从入门到精通(四)
  4. ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么
  5. mysql having和where_浅谈Mysql中where和having的区别
  6. 使用Spring Boot构建REST Web服务
  7. jQuery实现 div里面的文字如何自动缩小,避免文字溢出
  8. 解决Sublime Text3 显示中文乱码问题
  9. 《强化学习》中的第15章:神经科学
  10. python培训班-Python培训班哪家好?
  11. python字典成绩_python字典总结
  12. SignalR 聊天室实例详解(服务器端推送版)
  13. Android ViewPager + PagerAdapter 实现轮播图
  14. [源]云计算技术堆栈系列——鸟瞰
  15. win7 windows update 错误80072efe解决方法
  16. MySQL学习笔记.数据的导入和导出
  17. wml 与服务器交互
  18. mysql的WAL技术是什么_什么是WAL?
  19. 面试官如何考察你的思维方式?学会这个思维方式面试很简单!
  20. 广播(broadcast)的简单解析与实例运用

热门文章

  1. 5G时代不可或缺的关键技术:详解边缘计算参考架构3.0
  2. UR3机械臂+Realsense D435+ROS手眼标定记录
  3. at com.android.xiong.aysnctasktest.MainActivity$PageTask.onPostExecute(MainActivity.java:116)
  4. 阿德莱德大学语言班成绩为C,阿德莱德大学语言要求(包括雅思、托福、GRE、GMAT)...
  5. 机器人 零境交错吧_电击文库零境交错新手最强角色推荐 哪个组合最厉害
  6. 多孔纳米金的研究进展
  7. change事件做延迟处理
  8. 微信企业号之获取所有部门列表
  9. 华为云水平到底怎么样?
  10. DC综合的一些基本概念