Questions tagged «java»

Java是一种流行的高级编程语言。如果您在使用或理解语言本身时遇到问题,请使用此标签。这个标签很少单独使用,最常与[spring],[spring-boot],[jakarta-ee],[android],[javafx],[gradle]和[maven]结合使用。

15
您在Java项目中为包命名使用什么策略?为什么?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 改善这个问题 不久前,我就想到了这一点,最近,当我的商店正在制作其第一个真正的Java Web应用程序时,它又浮出水面。 作为介绍,我看到了两种主要的软件包命名策略。(要清楚,我不是在指整个“ domain.company.project”部分,而是在讨论其下​​的包约定。)无论如何,我看到的包命名约定如下: 功能性:根据体系结构上的功能来命名软件包,而不是根据业务领域来标识它们的身份。 对此的另一个术语可能是根据“层”进行命名。因此,您将拥有一个* .ui包,一个* .domain包和一个* .orm包。您的包裹是水平切片,而不是垂直切片。 这是多比逻辑命名更常见。实际上,我不相信我曾经见过或听说过执行此操作的项目。当然,这让我感到不安(有点像认为您已经提出了NP问题的解决方案),因为我并不聪明,我认为每个人都必须有充分的理由以自己的方式去做。在另一方面,我不反对人们只是缺少在房间里的大象和我从来没有听说过的实际参数为做包命名这种方式。这似乎只是事实上的标准。 逻辑:根据软件包的业务域标识来命名软件包,并将与该垂直功能有关的每个类放入该软件包。 正如我之前提到的,我从未见过或听说过,但这对我来说意义非凡。 我倾向于垂直而不是水平地接近系统。我想开发订单处理系统,而不是数据访问层。显然,我很有可能在该系统的开发过程中接触到数据访问层,但是重点是我不这么认为。当然,这意味着当我收到变更单或想要实现一些新功能时,不必去大量的软件包中寻找所有相关的类,这将是很好的。取而代之的是,我只是查看X软件包,因为我所做的与X有关。 从开发的角度来看,我认为使软件包记录您的业务领域而不是体系结构是一个重大胜利。我觉得域几乎总是系统的一部分,这很难理解,因为系统的体系结构(尤其是在这一点上)在其实现中几乎变得平凡。我可以使用这种命名约定进入系统,并立即从软件包的命名中得知它处理订单,客户,企业,产品等的事实,这似乎很方便。 看来这将使您能够更好地利用Java的访问修饰符。这使您可以更加清晰地将接口定义为子系统,而不是系统层。因此,如果您有想要透明透明地持久化的orders子系统,那么您不必通过在dao层中为其持久性类创建公共接口,而不必将其打包在里面,就可以从理论上讲永远不会让其他任何人知道它是持久性的。仅涉及其处理的类。显然,如果您想公开此功能,则可以为其提供接口或将其公开。通过将系统功能的垂直部分分割成多个软件包,您似乎损失了很多。 我想我可以看到的一个缺点是,它确实会使撕裂图层变得更加困难。您必须进入并更改所有软件包中的所有类,而不仅仅是删除或重命名软件包,然后使用替代技术将新软件包放到适当的位置。但是,我认为这没什么大不了的。可能是由于缺乏经验,但我必须想象一下,与您在系统中进行垂直要素切片编辑的时间相比,交换技术的时间显得苍白。 因此,我想这个问题会传给您,您如何命名包裹以及为什么?请理解,我不一定非要偶然发现这里的金鹅或其他东西。我对这一切非常陌生,主要是具有学术经验。但是,我无法发现推理中的漏洞,因此希望大家能够继续前进。

8
一个元素上有多个相同类型的注释?
我试图在一个元素上拍两个或多个相同类型的注释,在这种情况下是方法。这是我正在使用的近似代码: public class Dupe { public @interface Foo { String bar(); } @Foo(bar="one") @Foo(bar="two") public void haha() {} } 编译以上内容时,javac抱怨重复的注释: max @ upsight:〜/ work / daybreak $ javac Dupe.java Dupe.java:5:重复注释 这样根本不可能重复注释吗?从学步上讲,上面的两个@Foo实例是否由于内容不同而不同吗? 如果上述方法不可行,可能有哪些解决方法? 更新:我被要求描述我的用例。开始。 我正在建立一种语法糖化机制,以“映射” POJO到文档存储(例如MongoDB)。我想允许将索引指定为getter或setter上的注释。这是一个人为的例子: public class Employee { private List<Project> projects; @Index(expr = "project.client_id") @Index(expr = "project.start_date") public List<Project> …
88 java  annotations 


24
封装Integer.parseInt()的好方法
我有一个项目,我们经常在其中Integer.parseInt()将String转换为int。当出现问题时(例如,String不是数字,而是字母a或其他),此方法将引发异常。但是,如果我到处都必须处理代码中的异常,这很快就会非常难看。我想将其放在一个方法中,但是,我不知道如何返回一个干净的值以表明转换出错。 在C ++中,我可以创建一个方法,该方法接受一个指向int的指针,并让该方法本身返回true或false。但是,据我所知,这在Java中是不可能的。我也可以创建一个包含true / false变量和转换后的值的对象,但这似乎也不理想。全局值也一样,这可能会给我带来多线程问题。 那么有没有一种干净的方法可以做到这一点?

18
java.lang.ClassNotFoundException:Eclipse中的com.mysql.jdbc.Driver
代码有什么问题,调试时有很多错误。我正在为单例类编写代码以与数据库mysql连接。 这是我的代码 package com.glomindz.mercuri.util; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; public class MySingleTon { String url = "jdbc:mysql://localhost:3306/"; String dbName = "test"; String driver = "com.mysql.jdbc.Driver"; String userName = "root"; String password = ""; private static MySingleTon myObj; private Connection Con ; private MySingleTon() { System.out.println("Hello"); Con= createConnection(); …

10
评估list.contains包含JSTL中的字符串
如果JSP中存在某些值,则需要隐藏一个元素 这些值存储在一个列表中,所以我尝试了: <c:if test="${ mylist.contains( myValue ) }">style='display:none;'</c:if> 但是,它不起作用。 如何评估列表是否包含JSTL中的值,列表和值是字符串。
88 java  jsp  jstl 

9
java.lang.VerifyError:在分支目标JDK 1.7处期待一个堆栈映射框架
升级到JDK 1.7后,出现以下异常: java.lang.VerifyError: Expecting a stackmap frame at branch target 71 in method com.abc.domain.myPackage.MyClass$JaxbAccessorM_getDescription_setDescription_java_lang_String.get(Ljava/lang/Object;)Ljava/lang/Object; at offset 20 at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2413) at java.lang.Class.getConstructor0(Class.java:2723) at java.lang.Class.newInstance0(Class.java:345) at java.lang.Class.newInstance(Class.java:327) at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.instanciate(OptimizedAccessorFactory.java:184) at com.sun.xml.internal.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:129) at com.sun.xml.internal.bind.v2.runtime.reflect.Accessor$GetterSetterReflection.optimize(Accessor.java:384) at com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.<init>(SingleElementLeafProperty.java:72) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at com.sun.xml.internal.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:113) at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:166) at …
88 java  jaxb  java-7 

2
IntelliJ IDEA 12代码完成而不大写
在Eclipse 4.2中,我可以输入: joptionpane 然后按CTRL+SPACE,它将变成: JOptionPane 有什么办法可以使用智能IDEA吗?我尝试按CTRL+SPACE和ALT+/。但是,由于某种原因,它根本不起作用。 如果有人可以向我展示如何执行此操作,我将不胜感激。 我只是在尝试IDEA的版本12,因为我的一些朋友告诉我,这是一个更好的IDE,并且代码完成效果更好(他们的意见)。

5
为内存密集型应用程序增加JVM最大堆大小
我需要运行一个使用2GB以上内存的Java内存密集型应用程序,但是在增加堆最大大小时遇到​​了问题。到目前为止,我已经尝试了以下方法: 设置-Xmx参数,例如-Xmx3000m。这种方法在创建JVM时失败。从我搜索过的内容来看,-Xmx必须小于2GB。 使用-XX:+ AggressiveHeap选项。当我尝试这种方法时,即使我的计算机有8GB的内存,也会收到“内存不足”的错误消息,指出堆大小为1273.4 MB。 我还有其他方法可以尝试增加JVM的最大堆大小吗?以下是计算机规格的摘要: 作业系统:Windows 7(64 bit) 处理器:Intel Core i7(2.66 GHz) 记忆体:8 GB java -version: java version "1.6.0_18" Java(TM) SE Runtime Environment (build 1.6.0_18-b07) Java HotSpot(TM) Client VM (build 16.0-b13, mixed mode, sharing)

3
Maven:如何从命令行传递参数来运行.java文件
我有以下问题。我想运行mvn从一个命令行Main.java文件。Main.java接受参数。如何从命令行执行此操作? 我试图找到一个例子,但没有成功。有人可以帮我举一个例子吗? 我看了这里,但不太明白该怎么办。 另外,如何从与Main.java文件夹不同的文件夹中执行该命令? 例如Main.java位于my/java/program/Main.java。我应该放什么 mvn exec:java -Dexec.mainClass="what to put here?" -Dexec.args="arg0 arg1 arg2"
88 java  maven  arguments 

12
从Unicode字符中删除变音符(criticalñṅṇṋṉȵȵ)
我正在研究一种算法,该算法可以在带有变音符号的字符(tilde,circumflex,caret,umlaut,caron)及其“简单”字符之间进行映射。 例如: ń ǹ ň ñ ṅ ņ ṇ ṋ ṉ ̈ ɲ ƞ ᶇ ɳ ȵ --> n á --> a ä --> a ấ --> a ṏ --> o 等等。 我想用Java做到这一点,尽管我怀疑它应该是Unicode-y,并且应该可以轻松地以任何语言进行操作。 目的:允许轻松搜索带有变音符号的单词。例如,如果我有一个网球运动员数据库,并且输入了Björn_Borg,我还将保留Bjorn_Borg,这样,如果有人进入Bjorn而不是Björn,我就可以找到它。

7
servlet和Web服务之间的区别
这2和有什么区别?我在Google上发现的结果很少,没有定论。 这是一个后续问题: 假设我创建了带有@Controller注释的spring mvc Web应用程序注释了几个类,并创建了一些可以成功地从前端->后端传输某些信息(反之亦然)的信息,并且后端可能涉及某些数据库。 你会怎么称呼 其余的Web服务或servlet还是其他东西?

8
如何一起使用JUnit和Hamcrest?
我不明白JUnit 4.8如何与Hamcrest匹配器一起工作。有内部定义了一些匹配器junit-4.8.jar在org.hamcrest.CoreMatchers。同时,也有一些其他的匹配器hamcrest-all-1.1.jar中org.hamcrest.Matchers。那么,去哪儿呢?我是否应该在项目中明确包含hamcrest JAR并忽略JUnit提供的匹配器? 特别是,我对empty()匹配器感兴趣,并且在任何这些jar中都找不到它。我还需要其他东西吗?:) 还有一个哲学问题:为什么JUnit将org.hamcrest包包含在自己的发行版中而不是鼓励我们使用原始的hamcrest库?
88 java  junit  hamcrest 

1
REST-使用JSON进行HTTP发布
我需要接收仅包含2个参数的HTTP Post Multipart: JSON字符串 二进制文件 设置身体的正确方法是哪一种?我将使用Chrome REST控制台测试HTTP调用,因此我想知道是否正确的解决方案是为JSON参数和二进制文件设置“标签”键。 在服务器端,我正在使用Resteasy 2.x,我将像这样阅读Multipart主体: @POST @Consumes("multipart/form-data") public String postWithPhoto(MultipartFormDataInput multiPart) { Map <String, List<InputPart>> params = multiPart.getFormDataMap(); String myJson = params.get("myJsonName").get(0).getBodyAsString(); InputPart imagePart = params.get("photo").get(0); //do whatever I need to do with my json and my photo } 这是要走的路吗?使用标识特定内容处置的键“ myJsonName”检索我的JSON字符串是否正确?还有其他方法可以在一个HTTP多部分请求中接收这2个内容吗? 提前致谢
88 java  json  rest  http  resteasy 

6
Java AES并使用我自己的密钥
我想使用我自己的密钥使用AES加密字符串。但是我在密钥的位长上遇到了麻烦。您能否查看我的代码并查看需要修复/更改的内容。 public static void main(String[] args) throws Exception { String username = "bob@google.org"; String password = "Password1"; String secretID = "BlahBlahBlah"; String SALT2 = "deliciously salty"; // Get the Key byte[] key = (SALT2 + username + password).getBytes(); System.out.println((SALT2 + username + password).getBytes().length); // Need to pad key for AES …
88 java  key  aes 

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.