Questions tagged «java»

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

6
对象池是否已被弃用?
我对对象池的概念非常熟悉,并且我总是尝试尽可能多地使用它。 另外,我一直认为对象池是标准规范,因为我已经观察到Java本身以及其他框架尽可能多地使用池。 最近,尽管我读了一些对我来说是全新的东西(并且违反直觉?)。 该池实际上使程序性能变差,尤其是在并发应用程序中,并且建议实例化new对象,因为在较新的JVM中,对象的实例化确实非常快。 我在书中读过: Java Concurrency in Practice 现在,我开始考虑我是否对这里的事情有所误解,因为本书的第一部分建议使用Executors重用Thread而不是创建新实例。 那么,如今对象池是否已被弃用?

5
依赖注入:场注入与构造函数注入?
我知道这是一个热门辩论,关于最佳做法的观点会随着时间而改变。 我曾经在课堂上专门使用字段注入,直到开始在不同的博客(例如petrikainulainen和schauderhaft和fowler)上阅读有关构造函数注入的好处的信息。从那以后,我切换了方法,将构造函数注入用于必需的依赖项,将setter注入用于可选的依赖项。 但是,我最近与JMockit的作者(一个模拟框架)进行了辩论,在其中他认为构造函数和setter注入是不良做法,并表示JEE社区同意他的观点。 在当今世界上,是否有首选的注射方法?现场注入是首选吗? 在过去的几年中,从字段注入转换为构造函数注入后,我发现使用起来更加清晰了,但是我想知道是否应该重新审视我的观点。JMockit的作者(RogérioLiesenfeld)显然精通DI,因此鉴于他强烈反对构造函数/ setter注入,我感到有义务重新审视我的方法。

6
为什么C#是用不同于Java的“ new”和“ virtual + override”关键字构成的?
在Java中没有virtual,new,override对于方法定义的关键字。因此,方法的工作很容易理解。因为如果DerivedClass扩展BaseClass的和具有相同的名称和它们的签名的方法BaseClass的那么压倒一切将发生在运行时多态性(提供的方法是不是static)。 BaseClass bcdc = new DerivedClass(); bcdc.doSomething() // will invoke DerivedClass's doSomething method. 现在来到C#时,可能会有太多的困惑,并且很难理解newor virtual+derive或new +虚拟重写的工作方式。 我不明白为什么在世界上为什么要在我的方法中添加一个DerivedClass具有相同名称和签名的方法,BaseClass并定义一个新的行为,但是在运行时多态时,BaseClass将调用该方法!(这不是覆盖,但在逻辑上应该覆盖)。 如果virtual + override逻辑实现是正确的,则程序员必须考虑在编码时应允许用户重写的方法。里面有一些有利条件(让我们现在不去那里)。 那么,为什么在C#中有如此大的空间用于非逻辑推理和混乱。所以,我可以重新塑造我的问题是在现实世界方面,我应该考虑使用virtual + override替代new,还可以使用的new,而不是virtual + override? 在获得了特别是Omar的一些非常好的回答之后,我发现C#设计人员更加强调程序员在创建方法之前应该思考的问题,这种方法很好并且可以处理Java中的一些菜鸟错误。 现在我想到一个问题。就像在Java中,如果我有类似的代码 Vehicle vehicle = new Car(); vehicle.accelerate(); 后来我提出新的类SpaceShip衍生Vehicle。然后我想将所有内容更改car为一个SpaceShip对象,而我只需要更改一行代码 Vehicle vehicle = new SpaceShip(); vehicle.accelerate(); 这不会在任何代码点破坏我的任何逻辑。 但是在C#的情况下,如果SpaceShip不覆盖Vehicle类accelerate并使用,new则代码的逻辑将被破坏。这不是不利条件吗?

18
人们为什么仍然说Java很慢?[关闭]
在SO和其他地方,Java长期以来一直以缓慢而著称。从笑话到对问题和答案的许多评论,人们仍然认为Java仅仅基于90年代的经验就很慢。 这是我的问题:我们(大多数)不赞成人们认为Java速度慢的原因。除了小事之外,Java相当快。 那么为什么人们仍然拒绝相信Java很快呢?他们的心态一部分就是没有C / C ++的事情进展缓慢吗?是因为人们不随时间检查吗?是因为人们只是有偏见?
61 java  performance 

8
修改传入参数是否是反模式?[关闭]
我正在用Java编程,并且我总是使转换器像这样: public OtherObject MyObject2OtherObject(MyObject mo){ ... Do the conversion return otherObject; } 在新的工作场所中,模式是: public void MyObject2OtherObject(MyObject mo, OtherObject oo){ ... Do the conversion } 对我来说,这有点臭,因为我习惯于不更改传入的参数。此传入参数更改是反模式吗?它有一些严重的缺点吗?


7
代码覆盖突出显示了未使用的方法-我该怎么办?
我的任务是增加现有Java项目的代码覆盖率。 我注意到,代码覆盖率工具(EclEmma)强调了一些从未在任何地方调用的方法。 我最初的反应不是为这些方法编写单元测试,而是向我的生产线经理/团队强调它们,并询问为什么要从那里开始使用这些功能。 最好的方法是什么?为他们编写单元测试,或者质疑为什么要在那里?

10
是更好的Show()+ Hide()或SetVisible(bool可见)?
有什么更好的,为什么?(从界面设计的角度来看): a)具有两个Show()和Hide()函数 b)具有一项SetVisible(bool visible)功能 编辑:例如,某些对象具有可见性状态,并且可以使用此功能对其进行更改。 c)向有三个Show(),Hide(),SetVisible(bool visible)功能
59 java  c++  interfaces 

11
Java的现代回顾
我从事编程已经有几年了,我从Java开始。在我那段时间里,我发现许多不同的来源声称Java在某种程度上是一种劣等语言。我很清楚每种语言都有其优点和缺点,但是我所读过的有关Java的很多东西似乎都是过时的。 Java劣势最常被引用的原因是它比其他本地编译语言(例如C ++)慢得多。许多人批评游戏设计师Notch(开发了Minecraft)使用Java,因为它显然缺乏性能部门。我知道Java的运行速度要慢得多,但是此后有了很多改进,尤其是JIT编译。 我今天想就Java作为一种语言获得一些客观的见解。所以我的问题分为四个部分。 性能。 一种。今天的Java速度与C ++相比如何? b。是否可以使用Java创建现代AAA标题? C。如果有的话,在哪些方面Java比C ++慢?(即数字运算,图形或周围所有图形) Java现在被视为编译语言还是解释语言? 自早期以来,已经解决了Java的一些主要缺点? Java有哪些主要缺点需要解决? 编辑: 只是为了澄清起见,我并没有制作Java vs C ++,显然平均而言,c ++的速度要比Java快一点。现在,我只需要比较一下Java作为语言的成熟度就可以了。由于c ++永远存在,我想我将是一个比较点。


7
您如何用C#或类似Java的语言编码代数数据类型?
代数数据类型很容易解决一些问题,例如,列表类型可以非常简洁地表示为: data ConsList a = Empty | ConsCell a (ConsList a) consmap f Empty = Empty consmap f (ConsCell a b) = ConsCell (f a) (consmap f b) l = ConsCell 1 (ConsCell 2 (ConsCell 3 Empty)) consmap (+1) l 这个特定的例子在Haskell中,但是在其他语言中,本机支持代数数据类型,这将是相似的。 事实证明,有一个明显的面向对象样式子类型的映射:数据类型成为抽象基类,每个数据构造函数都成为具体的子类。这是Scala中的示例: sealed abstract class ConsList[+T] { def map[U](f: T …

4
在特殊情况下,我们可以接受重复的代码吗?
我正在一个软件项目中,我们必须构建三个API。一个用于家庭银行业务渠道,一个用于代理渠道,第三个用于移动渠道。 代理API是最完整的API,因为它具有所有功能。然后是更小的Home API,然后是移动API。 此处的架构师建立了一个公共层(所有API共享的跨通道EJB服务)。但是那时的API是不同的。 目前,这些API之间没有太大的区别。大型团队从代理商渠道开始,现在我们正在对其进行调整以适合家庭渠道。我们只是在为我们的家庭应用专门添加对象。否则,API之间的代码相似度为95%。这些API建立在Spring MVC之上,并且具有(控制器,模型和一些实用程序)。 基本上,控制器正在将BO映射到ChannelObject(在我看来,这样做不合适的地方),以及一些额外的实用程序和序列化程序。目前所有重复项。他们说重复的原因是他们希望API独立。“如果明天我们想要的家庭行为不同于代理商或移动设备,我们将不会挣扎!” 是否存在我们应该接受重复代码的情况?
57 java  api  spring 

3
在Java 8中使用方法引用语法而不是lambda语法是否会对性能产生好处?
方法引用是否跳过了lambda包装器的开销?他们将来可能吗? 根据有关方法参考的Java教程: 有时... lambda表达式除了调用现有方法外什么也不做。在这种情况下,通常更容易按名称引用现有方法。方法引用使您可以执行此操作;它们是紧凑的,易于阅读的lambda表达式,用于已经具有名称的方法。 由于以下几个原因,我更喜欢lambda语法而不是方法引用语法: Lambda更清晰 尽管有Oracle的主张,但我发现lambda语法比对象方法引用的简写形式更易于阅读,因为方法引用的语法是模棱两可的: Bar::foo 您是否在x的类上调用静态的一参数方法并将其传递给x? x -> Bar.foo(x) 还是在x上调用零参数实例方法? x -> x.foo() 方法参考语法可以代表任何一种。它隐藏了您的代码实际在做什么。 Lambda更安全 如果将Bar :: foo引用为类方法,并且Bar以后添加了同名的实例方法(反之亦然),则代码将不再编译。 您可以始终使用lambda 您可以将任何函数包装在lambda中-因此您可以在所有位置一致地使用相同的语法。方法引用语法不适用于采用或返回原始数组,引发已检查异常或具有与实例和静态方法相同的方法名称的方法(因为该方法引用语法对于调用哪种方法尚不明确) 。当您使用相同数量的参数重载方法时,它们不起作用,但是无论如何您都不应这样做(请参见Josh Bloch的第41项),因此我们不能将其与方法引用相对应。 结论 如果这样做不影响性能,我很想在我的IDE中关闭警告,并始终使用lambda语法,而不会将偶然的方法引用散布到我的代码中。 聚苯乙烯 无论在这里还是那里,但在我的梦中,对象方法引用看起来都更像这样,并且无需lambda包装器就直接在对象上对方法应用invoke-dynamic: _.foo()

6
如果getter对象的状态无效,是否应该抛出异常?
我经常遇到这个问题,特别是在Java中,即使我认为这是一个普遍的OOP问题。即:引发异常会揭示设计问题。 假设我有一个包含一个String name字段和一个String surname字段的类。 然后,它使用这些字段来组成一个人的全名,以便将其显示在某种文件上,例如发票。 public void String name; public void String surname; public String getCompleteName() {return name + " " + surname;} public void displayCompleteNameOnInvoice() { String completeName = getCompleteName(); //do something with it.... } 现在,我想通过displayCompleteNameOnInvoice在分配名称之前调用引发错误来增强类的行为。似乎是个好主意,不是吗? 我可以在getCompleteName方法中添加引发异常的代码。但是以这种方式,我违反了与类用户的“隐式”合同。通常,如果未设置获取方法的值,则不应将其抛出异常。好的,这不是标准的获取方法,因为它不会返回单个字段,但是从用户的角度来看,区分可能太微妙了,无法考虑它。 或者,我可以从中抛出异常displayCompleteNameOnInvoice。但是,这样做我应该直接测试name或surname字段,这样做会违反表示的抽象getCompleteName。检查并创建完整名称是此方法的责任。根据其他数据,它甚至可以决定在某些情况下足够了surname。 因此,唯一的可能性似乎是将方法的语义更改getCompleteName为composeCompleteName,这表明行为更“活跃”,并且具有抛出异常的能力。 这是更好的设计解决方案吗?我一直在寻找简单性和正确性之间的最佳平衡。有针对此问题的设计参考吗?

2
什么时候不使用Google Web Toolkit?[关闭]
我正在考虑在一个主要的内部Web应用程序开发项目中使用GWT,即在我眼中,它的主要优势是与Javascript的交叉编译,这将(至少从理论上讲)帮助我的团队将技术堆栈的大小减少一倍。 。 但是,像以前一样(像大多数开发人员一样)被烧掉了,我想听听那些确实在GWT的任何问题上实际使用过它的程序员,这些问题可能会阻碍或限制它在某个问题领域内的使用。 反对使用GWT的理由是什么?为什么?
55 java  javascript  ajax  gwt 

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.