我已经用Java编程了好几年了,但我刚刚回到学校获得正式学位.我很惊讶地发现,在我上一次任务中,我使用了如下所示的循环而丢失了分数.
do{
//get some input.
//if the input meets my conditions, break;
//Otherwise ask again.
} while(true)
Run Code Online (Sandbox Code Playgroud)
现在我的测试我只是扫描一些控制台输入,但我被告知这种循环是不鼓励的,因为使用break类似于goto,我们只是不这样做.
我完全理解goto和它的Java堂兄的陷阱break:label,我很有意识不使用它们.我也意识到一个更完整的程序会提供一些其他的逃避手段,例如刚刚结束程序,但这不是我教授引用的原因,所以......
怎么了do-while(true)?
我发现自己经常想要在其中编写带有参数占位符的可重用字符串,几乎与您在SQL PreparedStatement中找到的完全相同.
这是一个例子
private static final String warning = "You requested ? but were assigned ? instead.";
public void addWarning(Element E, String requested, String actual){
warning.addParam(0, requested);
warning.addParam(1, actual);
e.setText(warning);
//warning.reset() or something, I haven't sorted that out yet.
}
Run Code Online (Sandbox Code Playgroud)
Java中是否存在类似的内容?或者,有没有更好的方法来解决这样的问题?
我真正想问的是:这是理想的吗?
这是 :
String function() { return someString; }
Run Code Online (Sandbox Code Playgroud)
有什么不同吗?
String function() { return(someString); }
Run Code Online (Sandbox Code Playgroud)
它是我感兴趣的回报.我看到第二种风格不那么频繁,它只是惯例还是括号中的回报实际上做了不同的事情?
根据javadoc:
表示给定的@WebMethod只有输入消息而没有输出.通常,单向方法在执行实际业务方法之前将控制线程返回给调用应用程序.如果标记为@Oneway的操作具有返回值或Holder参数,则181处理器应报告错误,或声明任何已检查的异常.
那么我可以假设,如果我需要异常处理(选中或取消选中),建议不要使用此注释吗?我没有从业务逻辑中返回任何内容,但是我仍然有兴趣了解超时和其他各种特定于调用SOAP方法的错误.这个注释是否意味着我无法访问HTTP返回码或抛出异常?
问题:我最好自己进行线程化以获得真正的异步调用,并删除@Oneway注释吗?
只是一个普遍的问题,可供讨论......
到目前为止,我非常喜欢JSF,我是新手,但我更喜欢Struts.从专业人士的角度来看,您是否看到了JSF的强大未来?作为一个年轻的程序员,通过Struts或其他类似框架学习JSF 2.0是否值得投资?我应该坚持常规JSP吗?Ajax通过JQuery比JSF更简单吗?
我喜欢新技术,我喜欢迄今为止我从JSF看到的内容,但我也想要实用,而且很多Google搜索都会对JSF 2.0发表一些直截了当的评论.
想法?
我正在寻找关于JSF的HTML5标签H5的更多阅读.我看过IBM的JSF 2 fu文章,但除了关于"html5的承诺"等的演示文稿和幻灯片放映之外,还没有真正看到过.
谁能建议一些推荐的技术阅读?
我正在使用 Jersey 和 Jackson2 编写一个 Jax-RS 应用程序,以促进 JSON i/o。该服务本身运行良好,但我想通过让 Jackson 映射器自动将日期和日期时间序列化/反序列化为 JodaTime 对象来改进它。
我正在关注此处的文档并添加了相关的 jars,但我对这条指令迷失了:
Registering module
To use Joda datatypes with Jackson, you will first need to register the module first (same as with all Jackson datatype modules):
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
Run Code Online (Sandbox Code Playgroud)
我尝试在扩展 jax.ws.rs.core.Application 的自定义类中执行此操作,但我对该解决方案完全没有信心。我目前收到此错误:
Can not instantiate value of type [simple type, class org.joda.time.DateTime] from String value ('2014-10-22'); no single-String constructor/factory method
at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@3471b6d5; line: 7, column: 25]
Run Code Online (Sandbox Code Playgroud)
除了这个模块注册需要在应用程序(servlet?)启动时发生的一般印象之外,我不知道如何处理这些信息。我是否需要用特别的东西来注释自定义类才能让它被选中?我应该扩展一些课程吗?
我在 StackOverflow 上找到的示例通常会将其粘贴 …
抽象:
我有一个Spring @Component使用自动装配的ExecutorService作为工作池.我正在使用JUnit和Mockito来测试组件的功能,我需要模拟Executor服务.对于其他自动装配的成员来说这是微不足道的 - 通用助手,例如DAO层很容易被模拟,但我需要一个真正的 Executor服务.
码:
@RunWith(MockitoJUnitRunner.class)
public class MadeUpClassNameTest{
@Mock
private ExecutorService executor;
@Before
public void initExecutor() throws Exception{
executor = Executors.newFixedThreadPool(2);
}
@InjectMocks
private ASDF componentBeingAutowired;
...
Run Code Online (Sandbox Code Playgroud)
仅此一项不起作用,结果invokeAll()始终是一个空列表.
试图更明确地模拟执行器方法也不起作用......
@Test
public void myTestMethod(){
when(executor.invokeAll(anyCollection()))
.thenCallRealMethod();
...
}
Run Code Online (Sandbox Code Playgroud)
我得到了隐藏的措辞异常:
您不能在验证或存根之外使用参数匹配器.
(我以为这是一个存根?)
我可以提供一种thenReturn(Answer<>)方法,但我想确保代码实际上与执行者一起工作,相当一部分代码专门用于映射Futures的结果.
问题 如何提供真实(或功能可用的模拟)Executor服务?或者,我是否难以测试这个组件,这表明这是一个需要重构的糟糕设计,或者可能是一个糟糕的测试场景?
注意 我想强调我的问题是没有设置Mockito或Junit.其他模拟和测试工作正常.我的问题仅针对上面的特定模拟.
使用:Junit 4.12,Mockito 1.10.19,Hamcrest 1.3
Eclipse坚持在我的项目中启用JSF方面.我可以很容易地禁用它,但是当我通过Eclipse 运行Maven - > Update Project时,facet(以及相关WEB-INF/faces-config.xml文件)返回.我没有在我的POM中引用JSF,并且我的类路径中没有JSF jar所以......
Eclipse为什么要添加JSF Facet?
当它们被抛出多播时,Camel不会传播异常.
鉴于以下设置direct:route从beanRef抛出异常:
rest("/...")
.post()
.consumes("application/json")
.produces("application/json")
.route()
.onException(Exception.class)
.handled(true)
.bean("exceptionHandler")
.marshal("exceptionDataFormat")
.end()
.unmarshal("dataFormat")
...
.enrich("direct:services", new ServiceAggregator())
.to("direct:anotherRoute")
...
.end()
.endRest();
from("direct:services")
.errorHandler(noErrorHandler())
.multicast()
.setAggregationStrategy(new GroupedExchangeAggregationStrategy())
.executorServiceRef("executor")
.parallelAggregate()
.streaming()
.stopOnException()
.to("direct:route")
.end()
.end();
from("direct:route")
.errorHandler(noErrorHandler())
.bean("someRef", "someMethod")
.end();
Run Code Online (Sandbox Code Playgroud)
我没有允许异常处理程序使用交换并处理错误,而是立即返回以下异常(到SoapUI):
org.apache.camel.CamelExchangeException: Parallel processing failed for number 0. Exchange[...] at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:328)
at org.apache.camel.processor.MulticastProcessor$1.call(MulticastProcessor.java:299)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)
并且父路由以该异常结束并且没有异常处理.
如果direct:anotherRoute要抛出异常,则正确处理该异常.
为什么我不能将多播异常传播到父路由?
骆驼2.17-SNAPSHOT
在这个例子中,now和now + 2 months不等于 2之间的差异,尽管我认为LocalDate数学是这样工作的:
import java.time.LocalDate;
import static java.time.temporal.ChronoUnit.MONTHS;
public class MyClass {
public static void main(String... args) {
LocalDate now = LocalDate.of(2020, 7, 31);
LocalDate later = now.plusMonths(2);
System.out.println("Now: " + now);
System.out.println("Later: " + later);
System.out.println("Months between now and later: " + MONTHS.between(now, later));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Now: 2020-07-31
Later: 2020-09-30
Months between now and later: 1
Run Code Online (Sandbox Code Playgroud)
我发现这一点只是因为我碰巧运行了一个单元测试,该测试的日期超出了预期......
查看 LocalDate.addMonths 的 javadoc:
此方法分三步将指定的金额添加到月份字段:
Run Code Online (Sandbox Code Playgroud)Add the input months to the month-of-year field …
我正在尝试使用Java 7和Tomcat 7构建JSF/Hibernate应用程序.我已经安装了Java SDK和JavaEE SDK,并将javaee.jar和javaee-api-6.jar复制到我的Tomcat LIB文件夹中.通过我对这篇文章和这篇文章的理解,我应该拥有我需要的所有罐子,据我所知,我在这个文件夹中没有其他罐子,这些罐子有相互冲突的资源.
javaee.jar文件包含看起来像Maven pom文件的内容,没有别的.我不确定它的价值是什么.
我的javaee-api-6 jar大小约为950k,包含了我期望的所有.class文件.我正在使用的代码编译得很好,我只在尝试部署到Tomcat时看到错误.这些罐子来自玻璃鱼装置.奇怪的是文件ServletException.class文件只有366个字节.
我在Eclipse中设置了Tomcat,以便IDE在部署时"接管"Tomcat,而不是部署到某个插件文件夹(默认行为).
我正在使用的唯一相关包是来自javax.persistence的'Entity''Id'和'GeneratedValue'.
我只尝试使用javaee-api-6.jar,并更名javaee-api.jar并javaee.jar没有变化.看起来它的文件名并不重要.
对Glassfish lib文件夹的深入检查确实显示了许多相关外观的jar,但不是完整的javaee包,所以我无法将Javaee-api-6.jar移出并移动它们,它们是不完整的,我得到了一个类似的错误表明(我假设)某些类的实现无法找到.
所以我的问题是:我需要在Tomcat 7中包含什么才能使javax.persistence正常工作?
java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/ServletException
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.getDeclaredMethods0(Native …Run Code Online (Sandbox Code Playgroud)