Questions tagged «java»

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

10
什么时候“适当的”编程不再重要?
我在业余时间一直在开发一款Android游戏。它使用的是libgdx库,因此为我完成了很多繁重的工作。 在开发过程中,我不小心为某些过程选择了数据类型。我使用哈希表是因为我想要一些接近关联数组的东西。可读键值。在其他地方要实现类似的目的,我使用向量。我知道libgdx具有vector2和vector3类,但是我从未使用过它们。 当我遇到奇怪的问题并在Stack Overflow上寻求帮助时,我看到很多人只是在技术上“合适”另一个问题时就对使用某种数据类型的问题进行了讨论。就像使用ArrayList一样,因为它不需要定义的范围,而与使用新的已知边界重新定义int []一样。甚至像这样琐碎的事情: for(int i = 0; i < items.length; i ++) { // do something } 我知道它每次迭代都会评估item.length。但是,我也知道项目永远不会超过15到20个项目。因此,我是否应该在每次迭代中评估items.length? 我进行了一些测试,以查看应用程序使用我刚刚描述的方法相对于正确方法的性能,并按照教程进行操作,并使用社区建议的确切数据类型。结果:一样。平均45 fps。我打开了手机和银河标签上的每个应用程序。没有不同。 所以我想我对您的问题是:是否不再需要适当的门槛?可以说-“只要完成工作,我不在乎?”

7
Java的泛型有什么问题?[关闭]
我在该站点上看到过多次文章,这些文章谴责Java对泛型的实现。现在,我可以诚实地说,使用它们没有任何问题。但是,我没有尝试自己做一个通用类。那么,Java的通用支持又有什么问题呢?
49 java  generics 


6
将一个类定义为自身列表的子类有什么缺点?
在我最近的项目中,我定义了一个带有以下标头的类: public class Node extends ArrayList<Node> { ... } 但是,在与我的CS教授讨论后,他说这堂课既“令人难以忘怀”又是“不良习惯”。我还没有发现第一个是特别真实的,第二个是主观的。 我这样做的理由是,我有一个对象的想法,该对象需要定义为可以具有任意深度的对象,在这种情况下,实例的行为可以通过自定义实现或几个类似对象相互作用的行为来定义。这将允许抽象对象,这些对象的物理实现将由许多相互作用的子组件组成。¹ 另一方面,我知道这可能是不好的做法。将某物定义为自身列表的想法不是简单的,也不是物理上可以实现的。 考虑到我的用法,有什么正当的理由为什么我不应该在代码中使用它? ¹如果需要进一步解释,我会很高兴;我只是想使这个问题简明扼要。

3
哪种更好的做法-辅助方法是实例还是静态?
这个问题是主观的,但是我很好奇大多数程序员是如何做到这一点的。下面的示例使用伪C#,但这也应适用于Java,C ++和其他OOP语言。 无论如何,当在我的类中编写辅助方法时,我倾向于将它们声明为静态方法,并且仅在辅助方法需要它们时才传递字段。例如,给定以下代码,我更喜欢使用方法调用#2。 class Foo { Bar _bar; public void DoSomethingWithBar() { // Method Call #1. DoSomethingWithBarImpl(); // Method Call #2. DoSomethingWithBarImpl(_bar); } private void DoSomethingWithBarImpl() { _bar.DoSomething(); } private static void DoSomethingWithBarImpl(Bar bar) { bar.DoSomething(); } } 我这样做的原因是,它使(至少在我看来)清楚地知道了helper方法可能对其他对象产生副作用-即使没有阅读其实现方法。我发现我可以快速掌握使用该实践的方法,从而帮助我进行调试。 您更喜欢在自己的代码中执行哪些操作?这样做的原因是什么?

4
为什么方法不应该引发多种类型的检查异常?
我们使用SonarQube分析我们的Java代码,它具有以下规则(设置为关键): 公共方法最多应引发一个检查异常 使用检查的异常会强制方法调用者通过传播错误或通过处理错误来处理错误。这使得这些异常完全成为方法API的一部分。 为了使调用者的复杂度保持合理,方法不应抛出一种以上的检查异常。” 声纳的另一点是这样的: 公共方法最多应引发一个检查异常 使用检查的异常会强制方法调用者通过传播错误或通过处理错误来处理错误。这使得这些异常完全成为方法API的一部分。 为了使调用者的复杂度保持合理,方法不应引发超过一种检查异常。 如下代码: public void delete() throws IOException, SQLException { // Non-Compliant /* ... */ } 应该重构为: public void delete() throws SomeApplicationLevelException { // Compliant /* ... */ } 覆盖方法不受此规则检查,并允许引发多个检查的异常。 在阅读有关异常处理的文章时,我从没有遇到过这个规则/建议,也没有尝试找到有关该主题的一些标准,讨论等。我从CodeRach中发现的唯一东西是:一个方法最多应抛出多少个异常? 这是一个公认的标准吗?

6
检查`c> ='0'`或`c> = 48`更好吗?
与我的一些同事讨论之后,我遇到了一个“哲学上的”问题,即如何按照最佳实践来对待Java中的char数据类型。 假设有一个简单的场景(显然,这只是一个非常简单的示例,目的是为我的问题赋予实践意义),在给定String's'作为输入的情况下,您必须计算其中存在的数字字符的数量。 这些是2种可能的解决方案: 1) for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= 48 && s.charAt(i) <= 57) { n++; } } 2) for(int i=0; i<s.length(); i++) { if(s.charAt(i) >= '0' && s.charAt(i) <= '9' ) { n++; } } 两者中哪一个更“干净”并符合Java最佳实践?

6
用有意义的类名屏蔽Java集合的好坏方法?
最近,我习惯于用人类友好的类名“掩盖” Java集合。一些简单的例子: // Facade class that makes code more readable and understandable. public class WidgetCache extends Map<String, Widget> { } 要么: // If you saw a ArrayList<ArrayList<?>> being passed around in the code, would you // run away screaming, or would you actually understand what it is and what // …


5
作为C#开发人员,您会学习Java为Android开发还是使用MonoDroid?[关闭]
我认为自己非常精通C#。目前,这是我选择的语言,基本上,这就是我所有专业经验的基础。 不过,我对MonoDroid项目的存在感到困惑。我一直认为C#和Java 非常接近。就像,如果您知道一个,就可以很快地学习另一个。因此,当我考虑开发自己的第一个Android应用程序时,我以为自己会熟悉Java并足以入手,然后就可以自己学习了。 这难道不比使用MonoDroid更有意义,因为MonoDroid的功能可能不如Java Android SDK丰富,并且仍然需要学习自己的API(尽管是.NET API)?我只是觉得学习一门新语言(以及当时非常流行的一种语言)并获得一些经验(最好是无论如何都已经非常接近它)会更好,而不是坚持使用已有的技术却没有获得更多有价值的技能 也许我严重误解了平均潜在的MonoDroid用户。也许对Java和.NET经验丰富的人更喜欢.NET。或者,也许(实际上有可能)我只是没有考虑其他因素。我只是想知道,为什么您会使用MonoDroid而不是仅使用Java为Android开发?
46 java  c#  .net  android  monodroid 

5
建设者模式:什么时候失败?
在实施“构建器模式”时,我经常感到困惑于何时让构建失败,甚至每隔几天我就此采取不同的立场。 首先来一些解释: 随着早期的失败我的意思是建立一个对象应为无效参数传入,一旦失败,所以里面的SomeObjectBuilder。 有了失败的晚期我的意思是,只有建立一个对象可以在失败build()的是隐含调用对象的构造函数来建立呼叫。 然后是一些参数: 支持延迟失败:构建器类不应只不过是仅包含值的类。而且,它导致更少的代码重复。 支持尽早失败:软件编程中的一种通用方法是您希望尽早发现问题,因此,最合乎逻辑的检查位置是在构建器类的“构造器”,“设置器”中,最后是在build方法中。 关于此的普遍共识是什么?

6
有必要遵循防御性编程实践以获取永远不会公开获得的代码?
我正在编写纸牌游戏的Java实现,因此我创建了一种特殊的Collection类型,称为“区域”。不支持Java的Collection的所有修改方法,但是Zone API中有一种方法,该方法move(Zone, Card)可将Card从给定的Zone移到其自身(由package-private技术实现)。这样,我可以确保没有任何卡被带出区域并消失。它们只能移到另一个区域。 我的问题是,这种防御性编码有必要吗?这是“正确的”,并且感觉像是正确的做法,但这并不意味着Zone API永远不会成为某些公共库的一部分。这只是给我的,所以这有点像是在保护我自己的代码,以免仅使用标准Collections可能会提高效率。 我应该把这个区域创意带到多远?谁能给我一些建议,让我考虑在我编写的类中保存合同,特别是对于那些不会真正公开可用的类,应该考虑些什么?



3
Bob叔叔的干净架构-每层都有一个实体/模型类?
背景 : 我试图在我的Android应用程序中使用Bob叔叔的干净架构。我研究了许多开源项目,这些项目试图展示正确的方法,并且发现了一个基于RxAndroid 的有趣实现。 我注意到的是: 在每一层(表示,域和数据)中,都有一个用于同一实体的模型类(正在谈论UML)。另外,每当数据越过边界(从层到另一层)时,都有一些映射器类负责对象的转换。 题 : 当我知道如果需要所有CRUD操作时,它们都将具有相同的属性,是否需要在每个层中都有模型类?还是使用干净的体系结构是规则还是最佳实践?

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.