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。
所以,我想说,这取决于你长期以来在做什么,以及物体应该如何动作。
java 类的方法设计_设计问题:Java类与单方法OK?相关推荐
- java final类为什么不能继承_浅谈Java之终止继承:Final类和Fianl方法
前言 关键字Final不仅可以用来修饰变量,而且对类及其方法的继承也有很大的影响,本文将从类与方法两个方面介绍final关键字的功能. Final类 当关键字final用来修饰类时,其含义是该类不能再 ...
- java mbean获取堆信息_实时取得虚拟机类信息、内存信息、MXBean的使用方法
import java.lang.management.ClassLoadingMXBean; import java.lang.management.ManagementFactory; impor ...
- python设计_设计和历史常见问题
Guido van Rossum 认为使用缩进进行分组非常优雅,并且大大提高了普通Python程序的清晰度.大多数人在一段时间后就学会并喜欢上这个功能. 由于没有开始/结束括号,因此解析器感知的分组与 ...
- java按两列输出_有没有一种简单的方法可以将两列输出到Java中的控制台? - java...
如标题所述,是否有一种简单的方法可以将两列输出到Java中的控制台? 我知道\t,但是在使用printf时,我还没有找到基于特定列进行空间分配的方法. 参考方案 使用宽度和精度说明符,将其设置为相同的 ...
- java类验证和装载顺序_深度分析Java的ClassLoader机制(源码级别)
原文地址:https://dwz.cn/AztGFkO7 作者:Hollis Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文 ...
- java 发送短信 多通道_一种Java卡多通道临时对象管理方法与流程
本发明涉及Java智能卡领域,具体涉及一种Java卡多通道临时对象管理方法. 背景技术: :JavaCard规范支持逻辑通道的概念,允许最多智能卡中的16个应用程序会话同时开启,每个逻辑通道一个会话. ...
- java随机抽题系统_在用java做一个在线考试系统,随机抽题遇到了问题,我写了一个随机抽题的方法,不知道在asp按钮中怎么用...
你们看看方法对不对?publicListsuiji(intshitiId,inttimuId,inttimunanyidu,StringtimuLeixing){Stringsql="fro ...
- 智能家居数据库设计_设计更智能的数据表
智能家居数据库设计 重点 (Top highlight) Data tables are hard. There are many different ways to think about them ...
- java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class
一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...
最新文章
- lede旁路由作用_关于电容的旁路与去偶总结
- NYOJ 613 免费馅饼
- EOS从入门到精通(四)
- ESP8266 wifi模块连接上了热点之后 与服务器建立了tcp连接并进入了透传模式,如果关掉热点wifi模块的tcp连接没有切断,为什么
- mysql having和where_浅谈Mysql中where和having的区别
- 使用Spring Boot构建REST Web服务
- jQuery实现 div里面的文字如何自动缩小,避免文字溢出
- 解决Sublime Text3 显示中文乱码问题
- 《强化学习》中的第15章:神经科学
- python培训班-Python培训班哪家好?
- python字典成绩_python字典总结
- SignalR 聊天室实例详解(服务器端推送版)
- Android ViewPager + PagerAdapter 实现轮播图
- [源]云计算技术堆栈系列——鸟瞰
- win7 windows update 错误80072efe解决方法
- MySQL学习笔记.数据的导入和导出
- wml 与服务器交互
- mysql的WAL技术是什么_什么是WAL?
- 面试官如何考察你的思维方式?学会这个思维方式面试很简单!
- 广播(broadcast)的简单解析与实例运用
热门文章
- 5G时代不可或缺的关键技术:详解边缘计算参考架构3.0
- UR3机械臂+Realsense D435+ROS手眼标定记录
- at com.android.xiong.aysnctasktest.MainActivity$PageTask.onPostExecute(MainActivity.java:116)
- 阿德莱德大学语言班成绩为C,阿德莱德大学语言要求(包括雅思、托福、GRE、GMAT)...
- 机器人 零境交错吧_电击文库零境交错新手最强角色推荐 哪个组合最厉害
- 多孔纳米金的研究进展
- change事件做延迟处理
- 微信企业号之获取所有部门列表
- 华为云水平到底怎么样?
- DC综合的一些基本概念