草庐IT

java - 确保类是不可变的

在this6岁的问题最高答案说无法验证不变性。另一方面,底部有两个最近的答案,表明可以使用:jcabimutabilitydetector检测类是否不可变。我的问题是:这些工具在现实生活中有用吗?还有其他(更好的)解决方案吗?这几年有什么变化吗? 最佳答案 虽然我确信有很多工具可以直接测试一个类是否是不可变的,但真正的问题是测试允许具有接口(interface)或抽象类声明的字段的不可变类。基本上只允许密封的不可变类作为子字段,因为继承通常会破坏不变性。如果不使用JavaCollectionsAPI(即不使用Map、List或Set

java - 测试多线程代码或确保代码是线程安全的指南

是否有任何测试多线程代码的指南(除了在问题上抛出一堆线程并祈祷)。我基本上是在寻找测试数据损坏、死锁和其他并发问题的好方法。本质上,我希望能够通过测试证明代码是线程安全的。Java中是否有任何框架可以让您轻松地为多线程场景编写测试? 最佳答案 我已经编写了很多多线程代码,但从未发现任何可以轻松测试我没有预测到的并发正确性问题的东西。大多数时候,我必须考虑它可能会崩溃的场景,然后我如何在这种情况的极端版本​​中证明它的正确性(通常使用CountDownLatches或类似工具以我认为它可能崩溃的方式弯曲它。绝对使用FindBugs和类

java - Spring Transactions 以确保跨 2 个 REST 服务的一致性?

我有2个RESTapi,我在“事务”中“保存”数据。我很想听听有关如何确保第二个出现问题时第一个可以“回滚”的建议。我目前有一个重试循环,如果失败,我会向第一个调用发送一个删除。它工作正常,我只是好奇是否可以使用spring事务来处理它。就此而言,还有其他选择吗? 最佳答案 如果像这样的事情是可能的,那将是非常有趣和有用的,但我认为这是不可能的,因为没有标准的API用于RESTAPI的提交/回滚,就像JDBCAPI一样。使用Spring,您永远不能简单地将方法标记为@Transactional,因为Spring不知道如何“回滚”您在

java - Jxls 错误 : Cannot load XLS transformer. 请确保 Transformer 实现在类路径中

这个问题已经被问过一次了,但是没有人给出绝对的解决方案。我试图从现有模板生成一个xls文件,但我收到一个错误,我不知道如何面对!我的代码:Stringnombre="Manuel";try(InputStreamtemplateFileName=ExportExcelServlet.class.getResourceAsStream("/segJBOSS/lib/xls/Tabla_Gestion.xlsx")){try(OutputStreamdestFileName=newFileOutputStream("Tabla_Gestion.xls")){ArrayListarray=n

java - 如何自动检查/确保所有外部库是否包含在 eclipse 中的 lib 文件夹中?

我必须以压缩的eclipse项目文件夹的形式提交我的家庭作业。我只是在一个原本可靠的程序中失去了几分,因为我提交的内容中缺少一些外部库。我查看了我的项目文件夹,但无法弄清楚这些库是什么。eclipse中是否有一个选项可以自动将所有外部jar复制到lib文件夹?谢谢! 最佳答案 您能做的最好的事情就是测试它。打开一个新的Eclipse工作区并导入项目,就像您从学生那里接收项目一样。还要确保您没有将项目配置为使用项目文件夹之外的任何真正的外部库,否则如果您仍在同一台机器上,您可能不会注意到存在问题。而是将它们存储在项目下的“lib”文件

Java - 确保一个对象实现了一个接口(interface)

编辑:已解决,见下文你好,在Java中,我得到了一个可以属于任何类的对象。但是-该对象将始终必须实现一个接口(interface),因此当我调用接口(interface)定义的方法时,该对象将包含该方法。现在,当您尝试在Java中的通用对象上调用自定义方法时,打字很麻烦。我怎样才能以某种方式告诉编译器我的对象确实实现了该接口(interface),所以调用该方法是可以的。基本上,我正在寻找的是这样的东西:Object(MyInterface)obj;//Nowthecompilerknowsthatobjimplementstheinterface"MyInterface"obj.re

java - 确保通用 lambda 表达式的类型安全

这是对Java8retrievinglambdasetterfromclass的跟进.我正在尝试获取给定字段的getter方法publicIGettergetGetter(Classclazz,Fieldfield){ClassfieldType=null;try{fieldType=(Class)field.getType();}catch(ClassCastExceptione){error("Attemptedtocreateamistypedgetterforthefield"+field+"!");}returngetGetter(clazz,field.getName(),

java - 在 spring messages.properties 中,使用错误代码作为键时如何确保错误消息换行?

在messages.properties:error.code=Thisiserrormessage.\nThisisnextlineoferrormessage.现在,当我用这个“errors.rejectValue”为表单字段设置“error.code”时,我无法得到'\n'的换行符。使用form:errors显示错误消息时显示在jsp页面上元素。而不是'\n',使用也不起作用,并按原样显示在页面上。 最佳答案 为了显示一个作为换行符,或使错误消息正文中的任何其他html标记生效,例如一个,只需添加htmlEscape="fal

java - 确保文件在 JVM 退出时被删除

File.deleteOnExit()是否保证即使JVM过早终止也能删除文件? 最佳答案 正如TimBender所说,File.deleteOnExit()不保证文件确实被删除。但是,在Unixish系统(例如Linux或OSX)上,可以在写入临时文件之前(但在打开它之后)将其删除。只要你为文件保留一个打开的描述符,你就可以继续读写它,即使目录树中不再存在该文件,操作系统也会自动回收文件使用的空间当你程序退出(或关闭文件的最后一个描述符)。这在Windows上不起作用,它具有不同的文件系统语义并且不允许删除打开的文件。但是,在可移植

Java:如何确保接口(interface)方法不会比 X 花费更多时间?

我有一个接口(interface)方法booleanright(),如果它在一秒钟内没有“应答”,它应该返回false。 最佳答案 是的,这可以通过例如java.util.concurrent.Future(标准interface表示类型为V的异步计算的结果),结合方法get(longtimeout,TimeUnitunit).该方法可能会抛出TimeoutException,除其他异常(exception)情况外,但在正常执行时返回计算结果。在这种情况下,您需要一个Future,与get(1,TimeUnit.SECONDS)在t