草庐IT

java - MVP 与 CDI;避免循环依赖

我尝试使用MVP范例构建Web应用程序。因为我希望API干净并使所有内容都易于测试,所以我尝试通过ContructorInjection注入(inject)所有可能的内容。现在我到了一个有多个文本字段的View的地步。当数据库中有值时,演示者会填充这些文本字段,因此我的演示者需要View的引用,但vie显然也需要演示者的引用。CDI告诉我,将Presenter注入(inject)到View中是不可能的,因为存在循环依赖性。是否可以避免通过setter方法在View中设置演示者?代码看起来像这样:查看:publicClassViewImplimplementsview{privatePr

java - 在 AspectJ 中禁用/避免建议执行

假设我有一个方面publicaspectHack{pointcutauthHack(Stringuser,Stringpass):call(*Authenticator.authenticate(String,String))&&args(user,pass);booleanaround(Stringuser,Stringpass):authHack(user,pass){out("$$$"+user+":"+pass+"$$$");returnfalse;}}Authenticator.authenticate方法很重要。黑客拦截对此方法的调用。是否可以编写第二个方面来取消/禁用Ha

java - 检查消息类型时避免 instanceof

我有以下情况,客户端类根据它收到的消息类型执行不同的行为。我想知道是否有更好的方法来执行此操作,因为我不喜欢instanceof和if语句。我想到做的一件事是从客户端类中提取方法并将它们放入消息中。我会在IMessage接口(interface)中放置一个类似process()的方法,然后在每个具体消息类型中放置消息特定行为。这将使客户端变得简单,因为它只调用message.process()而不是检查类型。但是,唯一的问题是条件中包含的行为与对Client类中包含的数据的操作有关。因此,如果我确实在具体的消息类中实现了一个过程方法,我将不得不将它传递给客户端,我也不知道这是否真的有意

java - 如何避免使用 Thread.Sleep

在我下载最新版本的Netbeans之前,我从未考虑过Thread.Sleep的使用。Netbeans现在警告您不要使用Thread.Sleep。因此,我对该主题进行了一些研究,发现有人说您只需要将Thread.Sleep用于调试/测试目的,如果您在任何其他时间使用它,您的代码就会写得不好。所以我的问题是在以下情况下如何避免使用Thread.Sleep。我编写了一个与另一个应用程序交互的服务器应用程序。服务器有两个线程:处理来自套接字的数据并发回其他信息或只是简单的确认。这是主线程。启动套接字线程后,它会进入一个无限期的while循环。在这个while循环中,我检查以确保套接字线程仍然处

java - 在 java 中观察目录更改时避免检测不完整的文件

我正在监视传入文件的目录(使用来自apachecommons的FileAlterationObserver)。classExampleimplementsFileAlterationListener{publicvoidprepare(){Filedirectory=newFile("/tmp/incoming");FileAlterationObserverobserver=newFileAlterationObserver(directory);observer.addListener(this);FileAlterationMonitormonitor=newFileAltera

java - 如何参数化 getParameterNames 以避免警告

HttpServletRequestrequest;Enumerationparams=request.getParameterNames();如何声明上述方法的返回类型? 最佳答案 此方法自ServletAPI3.0起被参数化(JavaEE6)。在旧版本中,如ServletAPI2.5(JavaEE5)和此方法之前(以及许多其他方法)未参数化。您显然正在运行Servlet2.5容器或更早版本。您基本上有2个选择:升级到Servlet3.0容器(Tomcat7、Glassfish3、JBossAS6等),这样您就可以执行Enumer

java - 为什么我们需要在编码时避免突变?什么是突变?

为什么第二个代码(带流的代码)比第一个更好?首先:publicstaticvoidmain(String[]args){Listvalues=Arrays.asList(1,2,3,4,5,6);inttotal=0;for(inte:values){total+=e*2;}第二个:System.out.println(total);System.out.println(values.stream().map(e->e*2).reduce(0,(c,e)->c+e)); 最佳答案 变异正在改变一个对象,是编程语言中一种常见的副作用。

java - 如何避免 "Security - A prepared statement is generated from a nonconstant String"FindBugs 警告

我正在从事一个项目,其中有一段代码如下所示:Stringsql="SELECTMAX("+columnName+")FROM"+tableName;PreparedStatementps=connection.prepareStatement(sql);有什么方法可以更改此代码,以便FindBugs停止给我一个“安全性-准备好的语句是从非常量字符串生成的”警告?请假设此代码对于SQLINJECTION是安全的,因为我可以在代码的其他地方控制可能的“tableName”和“columnName”的值(它们不直接来自用户输入)。 最佳答案

java - 由于@Constraint validatedBy,如何避免层之间的交叉依赖?

在我们的项目中,我们在单独的Maven模块中有服务和DAO层。服务模块依赖于DAO模块并与其实体一起工作。问题是我们不能在DAO实体中放置使用来自服务层的一些服务的自定义jsr303约束,因为这会创建从DAO层到服务层的反向引用,因为validator类需要在自定义的validatedBy属性中引用@约束。有没有办法(使用标准jsr303api)在运行时指定某些自定义约束的validator类(或以任何其他方式解决我们的问题)?内置约束具有空的validatedBy属性,但我不知道是否有相应的api。 最佳答案 我们在基于Sprin

java - 有什么更好的方法可以避免 do-while(false);破解Java?

当代码流程是这样的时候:if(check()){......if(check()){......if(check()){......}}}我通常看到这种解决方法可以避免这种困惑的代码流:do{if(!check())break;......if(!check())break;......if(!check())break;......}while(false);有哪些更好的方法可以避免这种变通办法/黑客攻击,使其成为更高级别(行业级别)的代码?是否有可能来自Apachecommons或GoogleGuava的结构?注意:这是thesamequestionforC++的副本.最好的答案是