Questions tagged «java»

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

4
为什么C#开发人员用换行符括起来?[关闭]
在过去的几年中,我大部分时间主要用于C#和SQL。在那段时间里,与我合作的每个程序员都习惯将函数或控制流语句的左括号放在新的一行上。所以... public void MyFunction(string myArgument) { //do stuff } if(myBoolean == true) { //do something } else { //do something else } 我一直对这是多么浪费空间感到震惊,尤其是在if / else语句中。而且我知道在C#的更高版本中存在替代方法,例如: if(myBoolean == true) //do something on one line of code 但是几乎没有人使用过它们。每个人都在做换行符。 缺席很久之后,我又重新开始使用JavaScript。在我的记忆中,JavaScript开发人员曾经做过完全相同的curl-brace-newline事情,但是对于所有花哨的新库和新东西,大多数开发人员都在声明后加上了大括号: function MyJavaScriptFunction() { //do something } 您可以从中看到这种感觉,因为自从使用闭包和函数指针在JavaScript中变得很流行以来,它就节省了大量空间并提高了可读性。所以我想知道为什么它在C#中没有被视为完成的事情。实际上,如果您在Visual Studio 2013中尝试上述构造,它实际上会为您重新格式化,将开括号放在新的一行上! 现在,我在Code Review SE上看到了这个问题:https : …
44 java  c#  javascript  syntax 

10
是否有任何理由使用“普通旧数据”类?
在旧版代码中,我偶尔会看到只不过是数据包装器的类。就像是: class Bottle { int height; int diameter; Cap capType; getters/setters, maybe a constructor } 我对OO的理解是,类是数据的结构以及对该数据进行操作的方法。这似乎排除了此类对象。对我而言,它们无非是structs一种失败的面向对象的目的。我认为这不一定是邪恶的,尽管它可能是一种代码味道。 是否存在这样的对象必要的情况?如果经常使用,是否会使设计令人怀疑?

9
编程以供将来使用接口
我旁边有一位同事,他设计了这样的界面: public interface IEventGetter { public List<FooType> getFooList(String fooName, Date start, Date end) throws Exception; .... } 问题是,现在,我们在代码中的任何地方都没有使用此“ end”参数,它只是存在,因为将来可能需要使用它。 我们试图说服他,将参数放入当前不使用的接口是一个坏主意,但是他坚持认为,如果我们实现一段时间的“结束”日期使用,则必须做很多工作之后,必须修改所有代码。 现在,我的问题是,是否有任何来源正在处理像“尊敬的”编码专家这样的主题,我们可以将其链接到?


4
Rich Hickey说道:“ [接口/类/类型]的所有特殊性杀死了您的重用!”是什么意思?
在Rich Hickey 在第29分钟发人深省的goto会议主题演讲“ 值的价值 ”中,他谈论的是Java之类的语言的开销,并声明“所有这些接口都会破坏您的重用”。他什么意思?真的吗? 在寻找答案时,我遇到了: 最少知识原则(又称为“德米特定律”)鼓励密闭的API接口。维基百科还列出了一些缺点。 凯夫林·汉尼(Kevlin Henney)的《帝国服装危机》认为,使用而不是重复使用是适当的目标。 杰克·迪埃德里奇(Jack Diederich)的“ 停止写作课 ”演讲反对一般的过度设计。 显然,任何写得不好的东西都是没有用的。但是,编写良好的API的接口将如何阻止使用该代码?整个历史上都有一些例子,出于一种目的制造的东西被更多地用于其他目的。但是在软件世界中,如果您出于某种非预期目的使用某种东西,通常会破坏它。 我正在寻找一个好的界面的良好示例,该界面可以防止对某些代码的合法但无意的使用。是否存在?我无法想象。


8
为什么java.util.ArrayList允许添加null?
我不知道为什么java.util.ArrayList允许添加null。在任何情况下我都想添加null到ArrayList吗? 我问这个问题是因为在一个项目中,我们有一个错误,其中一些代码正在添加null到,ArrayList并且很难发现该错误在哪里。显然NullPointerException抛出了a ,但是直到其他代码尝试访问该元素时才抛出。问题是如何找到添加null对象的代码。如果ArrayList在要添加元素的代码中引发异常,那会更容易。

4
Scala与Java相比的性能
首先,我想明确指出,这不是确定哪种语言更好的语言-X-语言-Y的问题。 我已经使用Java很长时间了,我打算继续使用它。与此并行的是,我目前对Scala的学习非常感兴趣:除了一些让我印象深刻的小事情之外,我真的可以很好地使用这种语言。 我的问题是:在执行速度和内存消耗方面,用Scala编写的软件与用Java编写的软件相比如何?当然,通常这是一个很难回答的问题,但是我希望模式匹配,高阶函数等更高层次的结构会带来一些开销。 但是,我目前在Scala的经验仅限于50行以下代码的小示例,并且到目前为止,我还没有运行任何基准测试。因此,我没有真实数据。 如果事实证明Scala 在 Java上确实有一些开销,那么混合使用Scala / Java项目是否有意义,在该项目中,Scala中的较复杂部分和Java中的性能关键部分都可以编码?这是常见的做法吗? 编辑1 我运行了一个小型基准测试:构建一个整数列表,将每个整数乘以2并将其放入新列表中,然后打印结果列表。我编写了一个Java实现(Java 6)和一个Scala实现(Scala 2.9)。我已经在Ubuntu 10.04下的Eclipse Indigo上都运行了。 结果是可比的:Java 480 ms,Scala 493 ms(平均100次迭代)。这是我使用过的片段。 // Java public static void main(String[] args) { long total = 0; final int maxCount = 100; for (int count = 0; count < maxCount; count++) { final long t1 …


5
Lambda表达式除了具有单个方法的匿名内部类之外,还具有其他功能吗?
期待已久的Java 8中的lambda表达式有了新的炒作;每三天有一篇关于他们有多酷的文章随他们出现。 据我了解,lambda表达式只不过是具有单个方法的匿名内部类(至少在字节码级别)。除此之外,它还具有另一个不错的功能-类型推断,但我相信可以在某种程度上使用泛型来实现这一点(当然不能像使用lambda表达式那样巧妙)。 知道了这一点,lambda表达式不仅会带来Java语法上的加糖功能吗?是否可以使用无法使用当前语言功能构建的lambda表达式来创建功能更强大,更灵活的类或其他面向对象的构造?

8
现代的OO语言可以与C ++的数组存储性能竞争吗?
我只是注意到,我至少有点熟悉的每种现代OO编程语言(基本上只是Java,C#和D)都允许协变量数组。也就是说,字符串数组是对象数组: Object[] arr = new String[2]; // Java, C# and D allow this 协变量数组是静态类型系统中的一个漏洞。它们使得可能在编译时无法检测到的类型错误,因此必须在运行时检查对数组的每次写入: arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException 如果我进行大量阵列存储,这似乎会降低性能。 C ++没有协变数组,因此不需要进行此类运行时检查,这意味着不会降低性能。 是否进行了任何分析以减少必要的运行时检查次数?例如,如果我说: arr[1] = arr[0]; 有人会说这家商店不可能倒闭。我敢肯定,我还没有想到其他很多可能的优化方法。 现代编译器实际上是在进行这类优化吗?还是我不得不忍受这样一个事实,例如Quicksort总是执行O(n log n)不必要的运行时检查? 现代的OO语言是否可以避免因支持协变量数组而产生的开销?
40 c#  java  c++  d 

9
为什么要将一个类声明为抽象类?
我知道应用于抽象类的语法,规则,并且想知道抽象类的用法 抽象类不能直接实例化,但可以被其他类扩展 这样做的好处是什么? 它与接口有何不同? 我知道一个类可以实现多个接口,但只能扩展一个抽象类。接口和抽象类之间的唯一区别是吗? 我知道接口的用法。我从Java中AWT的事件委托模型中学到了这一点。 在哪种情况下我应该将类声明为抽象类?那有什么好处?

6
为什么要避免Java继承“扩展”
詹姆斯·戈斯林说 “您应该尽可能避免实现继承。” 而是使用接口继承。 但为什么?如何避免使用关键字“ extends”继承对象的结构,同时使我们的代码面向对象? 有人可以在“在书店订购书”的情况下,提供一个面向对象的示例来说明此概念吗?

7
具有定义常量的接口是不好的做法吗?
我正在用Java编写一组junit测试类。有几个常量,例如在不同的测试类中需要的字符串。我正在考虑一个定义它们的接口,每个测试类都将实现它。 我看到的好处有: 轻松访问常量:MY_CONSTANT而不是ThatClass.MY_CONSTANT 每个常量仅定义一次 这种方法是好的还是坏的做法?我觉得有点滥用接口的概念。 您通常可以回答有关接口/常量的问题,也可以回答有关单元测试的问题(如果有什么特别之处)。

3
为什么要使用“函数操作”而不是for循环?
for (Canvas canvas : list) { } NetBeans建议我使用“功能操作”: list.stream().forEach((canvas) -> { }); 但是,这是为什么首选?如果有的话,很难阅读和理解。您正在调用stream(),然后forEach()使用带参数的lambda表达式canvas。我看不出有什么比for第一个片段中的循环更好。 显然,我只是出于美学目的。也许这里缺少我的技术优势。它是什么?为什么我应该改用第二种方法?

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.