Questions tagged «java»

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

5
验证应位于哪一层?
我正在使用Spring Boot创建一个Rest API,并且正在使用Hibernate Validation来验证请求输入。 但是我还需要其他类型的验证,例如,当需要检查更新数据时,如果公司ID不存在,我想抛出一个自定义异常。 该验证应该位于服务层还是控制器层? 服务层: public Company update(Company entity) { if (entity.getId() == null || repository.findOne(entity.getId()) == null) { throw new ResourceNotFoundException("can not update un existence data with id : " + entity.getId()); } return repository.saveAndFlush(entity); } 控制器层: public HttpEntity<CompanyResource> update(@Valid @RequestBody Company companyRequest) { Company company = …

1
如果我们记录异常消息并抛出其他异常,它仍然是反模式吗?
我们的网络应用程序正在使用将ExceptionMapper某些异常映射到Response。我们记录异常消息,然后引发新异常,如下所示: catch (SomeException ex) { LOG.error(ex.getMessage()); throw new MyException(ex.getMessage()); } 我们不会再次抛出相同的异常,所以我的问题是,是否将其视为Log and Throw反模式。因此,最好删除相似位置的日志并将它们移至以下几个ExceptionMapper类: @Provider public class MyExceptionMapper implements ExceptionMapper<MyException> { // bla bla @Override public Response toResponse(final MyException ex) { LOG.error(ex.getMessage()); return Response.status(400).entity("something").build(); } }

5
Java Web应用程序文件夹结构
作为J2EE的初学者,我最近开始使用J2EE的核心:Servlets&Jsps从头开始开发自己的项目。 我无法评估我的项目文件夹结构是否正确。这是我的项目文件夹结构。 在问问题之前,我承认我无法回答,也无法证明有人问我为什么使用这种文件夹结构。问题:将我的jsps放在web-inf之外是一个好兆头。如果没有,为什么会这样呢?如果是,为什么? J2EE Web应用程序是否有任何标准的文件夹结构约定,我知道maven提出了一些标准,但是我们仍然可以根据我认为的要求进行自定义。 我做了一些谷歌搜索,找到了两个参考 1 2 答案不在同一页上,因此无法得出任何结论。 布局J2EE Web应用程序的文件夹结构时要考虑哪些要点,重要的是,应该将Jsps静态内容放入&为何?


5
为什么我看到这么多没有状态的可实例化类?
我在C ++和Java世界中看到许多没有任何状态的可实例化类。 我真的不知道为什么人们这样做,他们只能在C ++中使用带有自由函数的名称空间,或者在Java中使用具有私有构造函数和仅静态方法的类。 我能想到的唯一好处是,如果您以后决定在某些情况下需要不同的实现,则不必更改大多数代码。但这不是过早设计的情况吗?当/如果合适的话,以后可以将其变成一堂课。 我搞错了吗?如果我不将所有内容都放入对象(即实例化类)中,这不是OOP吗?那么,为什么在C ++和Java的标准库中有如此多的实用程序名称空间和类? 更新: 在以前的工作中,我当然已经看过很多这样的例子,但是我一直在努力寻找开放源代码的例子,因此也许毕竟不是那么普遍。不过,我想知道人们为什么这么做,以及这种做法有多普遍。

11
为什么使用System.out.println()这么糟糕?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 当然,对错误消息或警告使用日志记录框架非常有用。但是有时候如果我想在短时间内尝试一些新的东西,我会使用System.out.println()。 使用System.out.println()进行快速测试真的很糟糕吗?

5
DelayQueue在现实世界中的使用
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 DelayQueue在现实世界中的用途是什么,它旨在解决哪些常见问题?

2
Spring配置文件放在哪里?
我想将Spring框架集成到我的项目中,尤其是集成到服务器端。 因此,我不想将其放在war文件的WEB-INF文件夹中。 我是否应该将applicationContext.xml放入每个层中(意味着每个项目都被划分为不同的项目?(服务,域和DAO)) 有什么好的做法?
18 java  soa  spring 

8
与字符串耦合比与类方法耦合更“松散”吗?
我正在使用Swing在Java中启动一个学校小组项目。这是数据库桌面应用程序上的简单GUI。 教授给了我们去年项目的代码,以便我们了解他的工作方式。我最初的印象是代码要复杂得多,但是我想程序员在查看他们不仅编写的代码时经常会想到这一点。 我希望找到他的系统好坏的原因。(我问教授,他说我稍后再看为什么会更好,这让我不满意。) 基本上,为了避免他的可持久对象,模型(业务逻辑)和视图之间的任何耦合,所有操作都由字符串完成。存储在数据库中的可持久对象是字符串的哈希表,模型和视图彼此“订阅”,为它们所订阅的“事件”提供字符串键。 触发事件后,视图或模型会向所有订阅者发送字符串,这些订阅者将决定对该事件采取何种措施。例如,在一种视图动作侦听器方法中(我相信这只是在可持久对象上设置了bikeMakeField): else if(evt.getSource() == bicycleMakeField) { myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText()); } 该调用最终到达Vehicle模型中的此方法: public void stateChangeRequest(String key, Object value) { ... bunch of else ifs ... else if (key.equals("BicycleMake") == true) { ... do stuff ... 这位教授说,这种处理方式比让视图简单地在业务逻辑对象上调用方法更具可扩展性和可维护性。他说,视图和模型之间没有耦合,因为它们不知道彼此的存在。 我认为这是一种较差的耦合,因为视图和模型必须使用相同的字符串才能工作。如果删除视图或模型,或在字符串中输入错误,则不会出现编译错误。这也使代码比我认为的要长得多。 我想和他讨论这个问题,但是他利用他的行业经验来反驳我这个经验不足的学生可能提出的任何论点。我缺少他的方法有什么优势吗? 为了明确起见,我想比较上面的方法,同时将视图与模型明显耦合。例如,您可以将车辆模型对象传递到视图,然后更改车辆的“制造”,请执行以下操作: vehicle.make = bicycleMakeField.getText(); 这将把目前仅用于将车辆的品牌设置在一个地方的15条代码减少为一条可读代码。(由于这种操作在整个应用程序中进行了数百次,因此我认为这将是可读性和安全性的巨大胜利。) 更新资料 我的团队负责人和我重组了框架,采用了我们希望使用静态类型进行编码的方式,并告知了教授,最后给了他一个演示。只要我们不向他求助,他是否足够慷慨地允许我们使用我们的框架,以及是否可以让我们其余的团队保持最新状态-这对我们来说似乎很公平。
18 java  coupling 

6
自我记录代码与Javadocs?
最近,我一直在努力重构当前正在处理的部分代码库-不仅可以自己更好地理解它,而且还可以使其他从事代码工作的人更容易理解。 我倾向于认为自记录代码很好。我只是认为它更干净,并且如果代码能说明一切,那 ... 很好。 另一方面,我们有诸如javadocs之类的文档。我也喜欢这个,但是这里的评论(当然还有一般的评论)也有过时的风险。但是,如果它们是最新的,那么理解复杂的算法就非常有用。 最佳做法是什么?您如何在自我说明代码和javadocs之间划清界限?

6
为什么Java不允许像C ++中那样使用标头
我有一个问题,除了以下不符合我要求的答案外,我没有找到答案: “因为詹姆斯·高斯林不想” 我知道Java可以有接口(只有纯虚函数,没有属性),但这与类定义不完全一样。
18 java 

2
回调和侦听器有什么区别?
在Blackberry中,我们可以重写keyChar()方法并捕获keypress事件,也可以注册onKeyPressListener。我知道,onKeyListener是观察者模式。 在android中也有一个KeyEvent.callback和onKeyListener 这两个都是为什么我们不需要注册keyChar事件的事件。两种模式有什么区别?
18 java 

10
为什么继承和多态性被广泛使用?
我越了解不同的编程范例(例如函数式编程),就越开始质疑OOP概念(如继承和多态性)的智慧。我最初在学校学习继承和多态性,当时,多态性似乎是编写允许轻松扩展的通用代码的绝妙方法。 但是面对鸭子类型(动态和静态)以及诸如高阶函数之类的功能特性,我已经开始将继承和多态性视为基于对象之间脆弱的一组关系施加了不必要的限制。多态性背后的一般想法是,您只需编写一次函数,以后便可以在不更改原始函数的情况下向程序中添加新功能-您要做的就是创建另一个实现必要方法的派生类。 但是,无论是使用动态语言(例如Python)还是使用静态语言(例如C ++),通过鸭子输入都可以轻松实现这一点。 例如,请考虑以下Python函数,后跟等效的静态C ++: def foo(obj): obj.doSomething() template <class Obj> void foo(Obj& obj) { obj.doSomething(); } 相当于OOP的类似于以下Java代码: public void foo(DoSomethingable obj) { obj.doSomething(); } 当然,主要区别在于Java版本需要先创建接口或继承层次结构,然后才能起作用。因此,Java版本涉及更多工作,并且灵活性较差。此外,我发现大多数现实世界中的继承层次结构都有些不稳定。我们都已经看到了人为的形状和动物的示例,但是在现实世界中,随着业务需求的变化和新功能的添加,很难真正完成任何工作,然后才能真正扩展子类,或者重新建模/重构层次结构以包含更多的基类或接口,以适应新的需求。使用鸭子类型,您无需担心要建模的任何事情-您只需要担心所需的功能。 但是,继承和多态性是如此流行,以至于我怀疑将它们称为可扩展性和代码重用的主要策略是否过于夸张。那么,为什么继承和多态性如此成功呢?我是否忽略了继承/多态性比鸭子类型具有的一些重要优势?

2
Java AOT编译器如何工作?
有几种工具(Excelsior JET等)声称可以将Java应用程序转换为本地可执行文件(*.exe)。但是据我了解,这些工具实际上只是在创建java从外壳程序或命令行调用/执行的本机包装。 如果这种理解是不正确的,我不知道怎么可能。如果正在运行的JVM(java进程)本质上是一种高性能的解释器,则是从Java类文件中动态加载字节码,那么我看不出Java应用程序(用作JVM输入的字节码文件的集合)是怎么回事。真正转换为可执行文件。 这是因为JVM进程已经是本机可执行文件,它将字节码文件集作为输入。如果不完全重写JVM并脱离JVM规范,将这些字节码文件和JVM进程合并为一个统一的本机可执行文件似乎是不可能的。 因此,我问:这些工具实际上是如何将Java类文件“转换”为本地可执行文件的?
18 java  compiler  aot 

1
是否可以使用Jester for Java这样的变异测试工具替代现代产品?
“为什么您可以肯定地知道为什么您的测试很好呢?有时Jester告诉我我的测试是密闭的,但是有时发现的变化却是突然的。强烈推荐。”-肯特·贝克(Kent Beck) 但是我看到在stackoverflow中甚至没有一个名为“ Jester ” 的标签。那么,对于Jester的现代替代品是什么?除了从Cobertura和Clover等工具的代码覆盖范围中找到统计信息之外,如何确保编写的单元测试牢不可破?

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.