草庐IT

java - 'mix class and interfaces in the same package' 是不好的做法吗?

我刚刚发现了一些我以前从未听说过并且我不同意(到现在)的东西。在(已投票且未进一步评论)answer我阅读了“为什么要在同一个包中混合类和接口(interface)”所以我想知道,是否有理由将Java中的接口(interface)和实现分开。我知道我们没有义务将所有实现都放在接口(interface)包中,但(有时)不在那里是明智的吗?问候迈克[;-) 最佳答案 我同意org.life.java-我将拥有服务和底层service.impl包,但始终采用那种安排。我不同意“不好的做法”这个词。太强了。java.utilCollecti

java - 找到了多个名为 [spring_web] 的片段。这对于相对顺序是不合法的

我有一个springboot应用程序,当我使用Intellj的嵌入式服务器运行它时,它运行良好。但是,当我将其打包成.war文件并将其部署到tomcat上时,出现以下错误:org.apache.catalina.LifecycleException:Failedtostartcomponent[StandardEngine[Catalina].StandardHost[localhost].StandardContext[/file-upload-0.0.1-SNAPSHOT]]atorg.apache.catalina.util.LifecycleBase.start(Lifecyc

java - guava的ImmutableXXX真的是不可变的吗?

我已经使用guava一段时间了并且非常信任它,直到昨天我偶然发现了一个例子,这让我开始思考。长话短说,这里是:publicstaticvoidtestGuavaImmutability(){StringBuilderstringBuilder=newStringBuilder("partOne");ImmutableListmyList=ImmutableList.of(stringBuilder);System.out.println(myList.get(0));stringBuilder.append("appended");System.out.println(myList.g

java - 把混淆过的代码重新混淆是不是错了?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我过去使用过java混淆器,有些很容易进行逆向工程。我想也许它还不够混淆。应用两阶段混淆是错误的还是有问题的?混淆ProGuard用商业产品结束它ZelixKlassmaster--或者这是一个糟糕的方法?是否应该只使用一个混淆器?

java - 使用带有 CompletableFuture 的默认公共(public) fork/join 池进行长阻塞调用是不好的做法吗?

假设我有一个CompletableFuture,它包装了一个阻塞调用,例如使用JDBC查询后端。在这种情况下,由于我没有将任何执行程序服务作为参数传递给CompletableFuture.supplyAsync(),因此通过后端获取资源的实际阻塞工作应该由公共(public)Fork/Join池中的线程完成。不是吗badpractice让来自公共(public)FJpool的线程执行阻塞调用?我在这里的优势是我的主线程没有阻塞,因为我委托(delegate)异步运行的阻塞调用。检查正在阻塞的abtJDBC调用here.如果这个推断是正确的,为什么可以选择将默认的公共(public)FJ

java - 使您的业务(服务)层依赖于用户 session 是不是糟糕的设计?

在一个常见的MVC设计的应用程序中,让服务层依赖于用户session是不是一个坏主意?假设有一个服务方法可以从数据库中获取一些对象,并且您希望根据调用的初始化者返回不同的结果——例如,管理员可能会得到10行对象,而普通用户可能只会得到7行因为最后3个是“仅限管理员”的对象。解决这个问题的几种方法是:引入一个新的方法参数,其中包括调用用户。无依赖性但很麻烦,必须在许多方法中输入用户参数。针对不同的用户角色制定不同的方法(具有多种结果)。也没有依赖性,但有很多方法基本上做同样的事情,这增加了代码重复的风险。让该方法从存储当前用户session的静态上下文中的ThreadLocal变量中读取

java - 这是不可变类和构建器模式的有效 Java 实现吗?

Builder实现了Cloneable并覆盖了clone()并且不复制构建器的每个字段,不可变类保留了构建器的私有(private)克隆。这使得返回新构建器和创建不可变实例的稍微修改的副本变得容易。我可以这样走MyImmutablei1=newMyImmutable.Builder().foo(1).bar(2).build();MyImmutablei2=i1.builder().foo(3).build();据说Cloneable接口(interface)有些损坏,但这是否违反了良好的Java编码实践,这种构造是否存在任何问题?finalclassMyImmutable{publi

java - try/catch 是不是很耗资源的操作?

我听说与其抛出异常并在try/catchblock中捕获它们,不如在方法中返回null更合理,因为try/catch是消耗资源的操作。这是真的吗? 最佳答案 Try/catch仅在抛出异常时占用大量资源,否则几乎不需要。当它们使程序更干净时使用它们。返回null也可以。这取决于 关于java-try/catch是不是很耗资源的操作?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/

java - 可变类还是不可变类?

我在一些设计书籍中读到,不可变类可以提高可伸缩性,并且尽可能编写不可变类是一种很好的做法。但我认为不可变类增加了对象的增殖。那么,为了提高可伸缩性,使用不可变类好还是使用静态类(所有方法都是静态的类)更好? 最佳答案 immutable的主要好处|然而,classes的优点是您可以公开不可变的内部数据成员,因为调用者无法修改它们。这是一个很大的问题,比如java.util.Date。它是可变的,所以你不能直接从方法中返回它。这意味着你最终会做各种defensivecopying.这会增加对象增殖。另一个主要好处是不可变对象(immu

java - Selenium WebDriver : wait for element to be present when locating with WebDriver. findElement 是不可能的

使用WebDriverWait和ExpectedConditions等待WebElement很方便。问题是,如果WebElement.findElment是定位元素的唯一可能方式,因为它没有ID、没有名称、没有唯一类,那会怎样?WebDriverWait的构造函数只接受WebDriver作为参数,不接受WebElement。我已经设置了implicitlyWait时间,所以使用try{}catch(NoSuchElementExceptione){}似乎不是个好主意,因为我不这样做不想为这个元素等待那么长时间。场景如下:有一个网页的表单包含许多input标签。每个input标签都有格式