Questions tagged «java»

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

10
为什么“最终”关键字会有用?
似乎Java拥有声明类不可继承的能力,而现在C ++也拥有。但是,根据SOLID中的“打开/关闭”原理,为什么这样做有用?对我来说,final关键字听起来像friend-是合法的,但是如果您使用它,则很可能是设计错误。请提供一些示例,其中不可派生的类将成为优秀的体系结构或设计模式的一部分。
54 java  c++  solid  final 

5
什么时候在Java中使用原始vs类?
我看到Java具有Boolean(类)vs boolean(原始)。同样,有一个Integer(类)vs int(原始)。何时使用原始版本与类的最佳实践是什么?除非我有特定的理由(性能?),否则我是否应该基本上一直使用类版本?什么是最常见的,公认的使用方式?
54 java  class  usage 

8
为什么用Java和C#而不是构造函数使用静态main方法?
我正在寻找来自主要来源或次要来源的明确答案,为什么Java和C#决定将静态方法作为其入口点,而不是通过Application类的实例表示应用程序实例(具有入口点)作为合适的构造函数)。 我先前研究的背景和细节 这已经被问过了。不幸的是,现有的答案只是在乞求这个问题。特别是,以下答案令我不满意,因为我认为它们是不正确的: 如果构造函数被重载,将存在歧义。–实际上,C#(以及C和C ++)允许使用不同的签名,Main因此存在并解决相同的潜在歧义。 一种static方法意味着在初始化之前,没有对象可以被实例化。–这实际上是错误的,某些对象之前已实例化(例如,在静态构造函数中)。 因此,它们可以由运行时调用,而无需实例化父对象。–这根本没有答案。 为了进一步说明为什么我认为这是一个有效且有趣的问题: 许多框架确实使用类来表示应用程序,并使用构造函数作为入口点。例如,VB.NET应用程序框架使用专用的主对话框(及其构造函数)作为入口点1。 从技术上讲,Java和C#都不需要主要方法。好吧,C#需要一个才能进行编译,但是Java甚至不需要。而且在任何情况下都不需要执行它。因此,这似乎不是技术限制。而且,正如我在第一段中提到的那样,仅出于约定,它似乎不符合Java和C#的一般设计原理。 需要明确的是,使用静态方法并没有特定的缺点main,这很奇怪,这使我想知道其背后是否有某种技术原理。 我对主要来源或次要来源的明确答案感兴趣,而不仅仅是猜测。 1尽管有一个回调(Startup)可能会拦截它。
54 java  c#  history  entry-point 

4
与其他更接近Unix二进制语言的语言相比,使用Java时使用Docker的开发优势是否被否定?
我有一个朋友说: Docker很棒。您可以使用它在本地计算机上复制生产及其所有怪癖。然后,您可以超快速地通过所有登台工作流直接部署该实例。 现在,如果开发人员正在编写Ruby,PHP或Go(存在指向操作系统的定向二进制链接),这将是正确的。 但是当使用Java时 - 操作系统和语言之间已经存在一个虚拟层,无论底层操作系统如何,都可以确保操作的一致性。 可以说,在这种情况下,否定了为本地开发人员运行Docker来复制生产环境的好处。(与Ruby,PHP或Go相比)。 我愿意就此进行讨论,并热切希望听到持异议的观点(有证据)。 与其他更接近Unix二进制语言的语言相比,使用Java时使用Docker的开发优势是否被否定?
53 java  deployment  jvm  docker 

9
类的方法应该调用自己的getter和setter吗?
在我工作的地方,我看到很多班级都做了这样的事情: public class ClassThatCallsItsOwnGettersAndSetters { private String field; public String getField() { return field; } public void setField(String field) { this.field = field; } public void methodWithLogic() { setField("value"); //do stuff String localField = getField(); //do stuff with "localField" } } 如果我是从头开始写的,那我应该写成methodWithLogic()这样的: public class ClassThatUsesItsOwnFields { private String field; public …

6
Java最佳实践中是否会尽可能使用Lambda表达式?
我最近掌握了Java 8中引入的Lambda表达式。我发现,每当我使用功能接口时,我总是总是使用Lambda表达式,而不是创建实现该功能接口的类。 这被认为是好的做法吗?还是他们的情况不适合将Lambda用于功能接口?
52 java  lambda 

9
为什么Java有`void`方法?
/为什么Java需要有void方法?参考: 任何声明为void的方法都不会返回值。 就我所能想到的,void通过返回状态标志,被调用的对象或,将更好地服务于的每次使用null。 这将使每个调用成为可分配的语句,并有助于构建器模式和方法链接。仅出于效果而调用的方法通常会返回布尔值或泛型Success类型,或者在失败时引发异常。

10
在面试中询问关于产品的设计决策是否明智?[关闭]
我最近一直在考虑面试问题,并且一直在反思过去的糟糕面试经历。特别要注意的一点是,我曾问过访员,为什么团队选择在产品中使用Spring而不是EJB 3。面试官几乎撕开了我的脸,大喊:“因为Spring不是Java软件开发的全部和全部,您是否想要这份工作?”。对此,我告诉他,这可能不是我的工作,因此我立即退出了面试。 在面试开始时,我被告知公司的人员流动率很高,他们使用的产品最初是在Modula-3中创建的,然后移植到Perl,最后移植到Java。我收到了10页的技术问题手册,内容涉及Java,EJB,SQL和JDBC,还被问到有关我使用过的技术堆栈的问题。当提示您提出问题时,我觉得向他们询问他们的技术栈并获得合理的答案是合理的,而不是让面试官发火。 问题: 探讨采访中选择的架构是个好主意吗?如果没有,为什么? 从我自己的角度来看,面试是一个双向过程。如果面试官正在测试我的技术技能,我有权向他们提出相同的问题,以: 1)弄清楚他们对开发软件的看法和态度。2)确定他们的方法是否符合我对此类问题的处理方式。 生气的面试官可能没有很强的面试技巧,却忘记了面试是双向交流。如果有人问我这个问题,我会给出一个合理的答案,但我当然不会试图让受访者处于温和的屈服状态,即头在不说话的情况下上下摆动。
51 java  interview 

9
我如何说服队友不要忽略编译器警告?
我使用eclipse在Java中进行了一个大型项目(更像是数十个小型项目的混乱组合,由于依赖管理不善而无法轻易分离,但这是另一回事)。我们已经从编译器设置中关闭了许多警告,并且该项目仍然有10,000多个警告。 我强烈建议尝试解决所有警告,并尽可能修复所有警告,对于被调查并认为安全的警告,请予以压制。(我对将所有已实现/重写的方法标记为@Override的信仰也是如此)。我最大的论点是,一般而言,警告可以帮助您在编译时发现潜在的错误。也许在100次中的99次中,警告是微不足道的,但是我认为它为防止重大错误而节省了一次,这是值得的。(我的另一个原因是我的代码清洁度很强。) 但是,我的很多队友似乎都不在乎。当我偶然发现警告时,我有时会修复(但是当您触摸同事编写的代码时,您会发现这很棘手)。现在,警告实际上比类多,警告的优势已大大减少,因为当警告如此普遍时,没有人会费心地查看所有警告。 我该如何说服我的队友(或潜在的力量)警告需要被解决(或在充分调查后被取消)?还是我应该说服自己疯了? 谢谢 (PS我忘记提了,最后促使我发布此问题的原因是,我可悲地注意到我修复警告的速度比发出警告的速度慢)
51 java  eclipse 

4
使用公共决赛而不是私人获得者
我看到大多数不变的POJO都是这样写的: public class MyObject { private final String foo; private final int bar; public MyObject(String foo, int bar) { this.foo = foo; this.bar = bar; } public String getFoo() { return foo; } public int getBar() { return bar; } } 但是我倾向于这样写它们: public class MyObject { public final String foo; …

11
如果我需要设计来开始测试,我不明白TDD如何帮助我获得良好的设计
我试图围绕TDD,特别是开发部分,全神贯注。我看过一些书,但是我发现的书主要涉及测试部分-NUnit的历史,为什么测试很好,红色/绿色/重构以及如何创建字符串计算器。 好东西,但这只是“单元测试”,而不是TDD。具体来说,如果我需要一个设计来开始对其进行测试,我不理解TDD如何帮助我获得一个好的设计。 为了说明这一点,请想象一下这三个要求: 目录需要有产品列表 目录应记住用户查看过的产品 用户应该可以搜索产品 在这一点上,许多书从书本上摘下来,只是跳入“测试ProductService”,但他们没有解释如何得出结论,即首先有ProductService。这就是我要理解的TDD中的“开发”部分。 需要有一个现有的设计,但是实体服务之外的东西(也就是说:有一个Product,所以应该有一个ProductService)找不到地方(例如,第二个要求要求我有一个用户,但是我应该在哪里提醒该功能?搜索是ProductService的功能还是单独的SearchService?我怎么知道应该选择哪个?) 根据SOLID,我将需要一个UserService,但是如果我设计一个没有TDD的系统,则可能会得到一堆完整的Single-Method Services。TDD并不是一开始就让我发现自己的设计吗? 我是.net开发人员,但Java资源也可以使用。我觉得似乎没有真正的示例应用程序或书籍可以处理真正的业务应用程序。有人可以提供一个清晰的示例来说明使用TDD进行设计的过程吗?
50 java  c#  .net  tdd 

9
为什么==运算符字符串值比较不能与Java兼容?
每个熟练的Java程序员都知道您需要使用String.equals()来比较字符串,而不是==,因为==会检查引用是否相等。 在处理字符串时,大多数时候我都是在检查值相等性,而不是引用相等性。在我看来,如果该语言允许仅使用==比较字符串值,则将更加直观。 作为比较,C#的==运算符检查字符串 s的值相等。并且,如果您确实需要检查引用是否相等,则可以使用String.ReferenceEquals。 另一个重要的一点是,字符串是不可变的,因此允许使用此功能不会造成任何损害。 有什么特殊原因不能在Java中实现?

11
为什么C ++具有“未定义的行为”(UB),而其他语言(如C#或Java)却没有?
这篇Stack Overflow帖子列出了C / C ++语言规范声明为“未定义行为”的情况的相当全面的列表。但是,我想了解为什么其他现代语言(例如C#或Java)没有“未定义行为”的概念。这是否意味着编译器设计者可以控制所有可能的方案(C#和Java)或不能控制(C和C ++)?

4
为什么创建带有反射的通用setter和getter是一个坏主意?
前一段时间,我写了这个问题的答案,它关于如何避免每个可变变量都具有getter和setter方法。当时,我只有一种难以言表的直觉,认为这是一个坏主意,但OP明确要求这样做。我在这里搜索了这可能是个问题的原因,然后发现了这个问题,其答案似乎认为,除非绝对必要,否则使用反射是不好的做法。 那么,有人可以说出为什么应该避免反射的原因,特别是在通用getter和setter的情况下?
49 java  reflection 

6
Java检查的异常的解决方法
我非常感谢有关lambda和默认方法接口的Java 8新功能。但是,我仍然对检查的异常感到无聊。例如,如果我只想列出对象的所有可见字段,我想简单地写一下: Arrays.asList(p.getClass().getFields()).forEach( f -> System.out.println(f.get(p)) ); 但是,由于该get方法可能会抛出一个与Consumer接口协定不同的已检查异常,所以我必须捕获该异常并编写以下代码: Arrays.asList(p.getClass().getFields()).forEach( f -> { try { System.out.println(f.get(p)); } catch (IllegalArgumentException | IllegalAccessException ex) { throw new RuntimeException(ex); } } ); 但是,在大多数情况下,我只希望将异常作为a抛出,RuntimeException并让程序处理或不处理没有编译错误的异常。 因此,我想就我对有争议的异常进行检查的方法发表您的看法。为此,我创建了一个辅助接口ConsumerCheckException<T>和一个实用程序功能rethrow(根据Doval的评论进行了更新),如下所示: @FunctionalInterface public interface ConsumerCheckException<T>{ void accept(T elem) throws Exception; } public class Wrappers { public static <T> Consumer<T> rethrow(ConsumerCheckException<T> c) …

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.