Questions tagged «java»

Java是最初由Sun Microsystems开发的高级,独立于平台的,面向对象的编程语言。Java目前归甲骨文所有,甲骨文于2010年收购了Sun。

3
干净的代码和混合对象以及功能嫉妒
因此,我最近对代码进行了一些重大的重构。我试图做的主要事情之一就是将类分为数据对象和辅助对象。除其他外,这是由“ 清洁代码”的这一部分启发的: 杂种 这种混乱有时会导致不幸的混合数据结构,即一半对象和一半数据结构。它们具有执行重要功能的函数,也具有公共变量或公共访问器和更改器,它们出于所有意图和目的,将私有变量公开,从而诱使其他外部函数以程序程序将要使用的方式使用这些变量。数据结构。 这样的混合体很难添加新功能,但是也很难添加新的数据结构。他们是两全其美的。避免创建它们。它们表示设计混乱,其作者不确定(或者更糟,是无知)他们是否需要保护功能或类型。 最近,我正在查看我的一个工作对象(恰好实现了Visitor模式)的代码,并看到了: @Override public void visit(MarketTrade trade) { this.data.handleTrade(trade); updateRun(trade); } private void updateRun(MarketTrade newTrade) { if(this.data.getLastAggressor() != newTrade.getAggressor()) { this.data.setRunLength(0); this.data.setLastAggressor(newTrade.getAggressor()); } this.data.setRunLength(this.data.getRunLength() + newTrade.getLots()); } 我立即对自己说:“功能令人羡慕!这种逻辑应该在Data类中-特别是在handleTrade方法中。handleTrade并且updateRun应该始终一起发生”。但是后来我想到“数据类仅仅是一个public数据结构,如果我开始这样做,那么它将成为一个混合对象!” 有什么更好的,为什么?您如何决定该做什么?

3
继承:是将代码从超类实际上“复制”到子类,还是“由子类”引用?
类Sub是class的子类Sup。这实际上意味着什么?换句话说,“继承”的实际含义是什么? 选项1:将Sup中的代码虚拟复制到Sub。(如在“复制-粘贴”,但没有复制的代码视觉上在子类中看到的)。 示例:methodA()最初是Sup中的一种方法。Sub扩展了Sup,因此methodA()(实际上)被复制粘贴到Sub。现在Sub具有一个名为的方法methodA()。它methodA()在每一行代码中均与Sup相同,但完全属于Sub,并且不依赖于Sup或以任何方式与Sup相关。 选项2: Sup中的代码实际上没有复制到Sub。它仍然只在超类中。但是该代码可以通过子类访问,并且可以由子类使用。 示例:methodA()是Sup中的一种方法。Sub扩展了Sup,因此现在methodA()可以通过Sub进行访问,如下所示:subInstance.methodA()。但这实际上将methodA()在超类中调用。这意味着methodA()将在超类的上下文中运行,即使它是由子类调用的。 问题:这两个选项中的哪一个实际上是如何工作的?如果它们都不是,那么请描述这些事情实际上是如何工作的。

4
在Java中分割定界字符串的最快方法
我正在构建一个在分隔字符串上提供多列排序功能的比较器。我目前使用String类的split方法作为将原始String拆分为标记的首选。 这是将原始String转换为String数组的最佳方法吗?我将对数百万行进行排序,因此我认为方法很重要。 它似乎运行良好并且非常简单,但是不确定Java中是否有更快的方法。 这是我的比较器中排序方式的工作方式: public int compare(String a, String b) { String[] aValues = a.split(_delimiter, _columnComparators.length); String[] bValues = b.split(_delimiter, _columnComparators.length); int result = 0; for( int index : _sortColumnIndices ) { result = _columnComparators[index].compare(aValues[index], bValues[index]); if(result != 0){ break; } } return result; } 在对各种方法进行基准测试之后,不管您信不信,使用最新版本的Java最快的方法是split方法。您可以在这里下载我完成的比较器:https : //sourceforge.net/projects/multicolumnrowcomparator/

4
哪种设计模式更适合记录?
我应该在程序中记录一些事件,但据我所知,最好将记录代码保留在程序之外,因为这与程序的实际功能无关。因此,您能否告诉我是否应该完全将其保留在代码之外,而仅使用观察者和侦听器记录事件?或者,我可以在需要记录某些内容的地方添加如下代码: MyGloriousLogger.getXXXLogger().Log(LogPlace, new LogObject(z1, z2, z3, z4, ..., z99)); 使用观察者设计模式是否会出错?我需要其他设计模式吗?还是我应该停止考虑设计模式? PS1。如果我只想使用侦听器和观察者进行登录,则肯定需要添加和改进程序的观察者和侦听器。 PS2。我当然知道有许多用于登录Java的库,并且我正在使用java.utils.logging,但是我需要有一个包装器来记录我的特殊对象。

4
在Java中实现多个通用接口
我需要一个接口来确保我可以使用某种方法,包括特定的签名。到目前为止,他就是我所拥有的: public interface Mappable<M> { M mapTo(M mappableEntity); } 当一个类应该可映射到多个其他实体时,就会出现问题。理想的情况是这样(不是java): public class Something implements Mappable<A>, Mappable<B> { public A mapTo(A someObject) {...} public B mapTo(B someOtherObject) {...} } 什么是最好的方式来实现这种剩余的“通用”?
10 java  generics 

3
如何通过网络同步时钟以进行游戏开发?
我正在写一个具有很多基于时间的方面的游戏。当网络停滞且数据包未通过时(以及接收和不接收数据包之间的时间),我用时间来帮助估计玩家的位置。从某种意义上说,这是一种吃豆子型游戏,玩家可以选择一个方向并且不能停止移动,因此该系统才有意义(或者至少我认为可以)。 所以我有两个问题:1)由于网络存在延迟,我如何在开始时同步游戏的时钟。2)可以不同步它们,只是假设它们是相同的(我的代码与时区无关)吗?这不是一个超级竞赛的游戏,人们会改变时钟以作弊,但仍然如此。 该游戏正在使用Java和Python进行编程(作为项目进行并行开发)

4
替换为Java的instanceof?
因此,我对现实世界中的编程(学术项目之外)还很陌生,并且遇到了很多帖子,他们说instanceof使用来确定特定对象的类是一件坏事。 我的情况是我有三个类,一个基本产品类,一个扩展了该类,另一个扩展了该类。这些都存储在数据库的同一表中,我有一些代码需要使用每个方法来提取数据。 解决这种问题的最佳实践是什么?我已经阅读了有关多态性的一些知识,但是找不到解决我所遇到问题的任何示例。它们通常都覆盖了一个对我来说不起作用的方法,因为我需要从不同的对象中提取不同的东西。 有没有更好的方法可以做到这一点,还是我坚持使用instanceof某种反射来获取特定于对象的字段?


3
在Java应用中使用MVC
我需要编写一个跨平台的GUI应用程序来处理(在多个线程中)并可视化大量数据。理想情况下,应用程序应该相对较快并且外观良好。 该应用程序的界面将包括一个表格小部件,一个树状小部件和一个自定义图形绘制小部件。用户将能够从这些小部件中的任何一个修改数据,并且更改应立即反映在其他小部件中。 自然,我计划使用MVC。但是,我通常使用C ++ / Qt进行所有GUI编程,并且接触Java的机会非常有限。因此,我非常感谢有关如何在Java中组织此类应用程序的任何建议。特别是我应该使用Swing还是JavaFX?您会为工作选择哪些小部件?您能推荐涵盖Java平台这些方面的任何书籍/在线教程吗? 我将不胜感激任何反馈。谢谢! (此问题最初发布在Stack Overflow上,但建议将该站点建议为一个更合适的位置)
10 java  mvc  swing  javafx 

11
我必须学习html和javascript才能创建Web应用程序吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我是一位经验丰富的Java程序员,并且我想创建一个需要动态页面,图形等的复杂Web应用程序(以SO为例)。创建此类应用程序是否需要学习javascript / html? 并不是我不想学习另一种语言(我之前已经做过),但是javascript环境上的技术似乎变化如此之快,以致于当您完成学习一个框架时它已经过时了。我已经检查了许多用于Web开发的java框架(spring,play),但没有深入探讨。那么可以在不学习html / javascript的情况下使用这些框架(或我可能不知道的其他可能的Java框架)吗?我也有一些python经验。因此,如果我可以用python做该应用程序,那也是一种选择。



3
Java小应用程序今天在网络上有什么位置吗?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 现在,许多浏览器默认情况下都禁用Java小程序,要求每页启用它们。在过去几年中,applet似乎并没有太大变化。实际上,客户端Java(小应用程序,桌面应用程序……)似乎已经完全消亡,而Java主要成为一种服务器端语言。 除了兼容性以外,在当今的网络上还有哪些地方仍然可以使用applet?作为熟悉Java和JavaScript的Web开发人员,为什么我会选择使用Applet代替某些JavaScript?
10 java  html5 

6
DRY原理的解释
现在,我在编码中正在尝试DRY(不要重复自己)这个概念。我正在创建此函数,但我担心它变得太复杂了,但我尝试遵循DRY原理。 createTrajectoryFromPoint(A a,B b,C c,boolean doesSomething,boolean doesSomething2) 我说过的这个函数需要3个输入参数,然后在给定布尔组合doesSomething和的情况下,该函数会做一些稍有不同的事情doesSomething2。但是我遇到的问题是,随着每个新的布尔参数的添加,此函数的复杂性大大增加。 所以我的问题是,最好是让一堆不同的函数共享很多相同的逻辑(从而违反DRY原理),或者让一个函数在给定多个参数的情况下表现稍有不同,但使其复杂得多(但是保存DRY)?
10 java  design  dry 

3
方法重载什么时候合适?
假设我正在开发一个现有的,相当大的系统。我有一个myObject类的对象MyClass(出于示例的原因,假设我正在Java中工作)。myObject是一种含有一种组合物Collection,比方说,一个List和其它目的(我认为)是无关紧要的。它包含委托方法,这些委托方法仅用于调用List它所组成的方法,以确保List它所具有的不暴露(对不起,如果我的术语错误)。 假设这List是一个,List<String>但是由于某种原因,主要的访问方法是class的mask方法SomeOtherClass。如果要在其中插入一个新的值对List,则需要一个SomeOtherClass名为的对象someObject。我会打电话给,myObject.insert(someObject)并且在insert方法内部将有一些魔术可以检索String到中放入List<String>。 现在假设我只有一个String值,没有SomeOtherClass要插入的对象。假设我无法修改该insert方法,因为它会破坏系统中的所有内容。那我应该重载该insert方法吗?还是应该在SomeOtherClass每次调用时创建一个新对象insert? 我想如果我确实超载了,它会看起来像这样…… public void insert(String s) { ... } public void insert(SomeOtherObject obj) { this.insert(obj.magicStringMethod()); } (此示例是一个人为的难题,它基于我昨天遇到的关于超载的类似(稍微复杂一些)情况。如果有不清楚的地方,我将对其进行扩展) 这是重载方法的合适地方吗?如果没有,我什么时候应该重载方法?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.