空对象模式的主要目标是确保向客户端提供可用的对象。所以我们想替换以下代码......
void Class::SetPrivateMemberA() {
m_A = GetObject();
}
void Class::UseA() {
if (m_A != null) {
m_A.Method();
} else {
// assert or log the error
}
}
Run Code Online (Sandbox Code Playgroud)
...通过这个实现:
void Class::SetPrivateMemberA() {
m_A = GetObject();
}
void Class::UseA() {
m_A.Method();
}
Run Code Online (Sandbox Code Playgroud)
我想到的问题是 GetObject() 仍然返回一个对象、NULL 对象或其他对象。我喜欢不重复检查 null 并相信发送回的对象可用的想法,但为什么我不在第一个实现中这样做呢?
空对象模式的优点只是稍微增加了清理代码的信任吗?对于第二个实现,在调用 A.Method() 之前检查它是否不为 null 不是一个好习惯吗?
我有一个可执行的JAR,它包含所有依赖项和测试类.我已经确认在执行jar时会调用main()方法.我正在尝试向main()添加代码,以便我可以运行特定的TestNG测试类.从TestNG.org上的文档来看,这似乎就是这样做的:
TestListenerAdapter tla = new TestListenerAdapter();
TestNG testng = new TestNG();
testng.setTestClasses(new Class[] { com.some.path.tests.MyTests.class });
testng.addListener(tla);
testng.run();
Run Code Online (Sandbox Code Playgroud)
我的文件夹结构很典型:
/src/main/java/Main.java
/src/test/java/com/some/path/tests/MyTests.java
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试编译它时,我收到此错误:
java: /src/main/java/Main.java:46: package com.some.path.tests does not exist
Run Code Online (Sandbox Code Playgroud)
无论如何我可以改变我的项目,以便main()中的testng.setTestClasses()可以访问测试类吗?
鉴于这些代码示例:
样品1
public class SomeClass {
private static final int onlyUsedByMethodFoo = 1;
// many lines of code
public static void foo() {
final String value = items[onlyUsedByMethodFoo];
}
}
Run Code Online (Sandbox Code Playgroud)
样本2
public class SomeClass {
// many lines of code
public static void foo() {
final int onlyUsedByMethodFoo = 1;
final String value = items[onlyUsedByMethodFoo];
}
}
Run Code Online (Sandbox Code Playgroud)
我更喜欢第二个代码示例,因为该值接近于使用它的位置.它只用于Foo().我没有看到将它声明为全局值的优势,即使频繁调用Foo()也是如此.我能看到的全局静态值的唯一优势可能在于性能,但目前尚不清楚它将具有多大的性能优势.也许Java认识到这一点并优化了字节码.
关于绩效,是否值得在全球范围内宣布一个恒定的价值?性能增益是否有理由将恒定值从程序员使用和读取的位置移动得更远?
我需要编写一个显示第三方提供的PDF的程序.我需要在将文本数据显示给用户之前将其插入到表单中.我可以选择将PDF转换为另一种格式,但它必须与原始PDF完全相同.C++是首选语言,但可以调查其他语言(例如C#).它需要在Windows桌面计算机上运行.
您建议调查哪些库,工具,策略或其他编程语言来完成此任务?是否有任何在线示例可以指导我.
先感谢您.
前段时间我设置Sonar来扫描一个开发项目.每晚使用cronjob调用扫描.有一次我遇到了运行cronjob的机器的问题,并且错过了一些夜间扫描.我从错过的一天下载了源代码,并使用Sonar Runner完成了新的声纳扫描.正如我所料,数据显示在Sonar中是最近的扫描,这不是我想要的.我想将扫描注入特定日期,以便我可以填写扫描未运行的日子.我没有在sonar-project.properties文件中看到这样做的选项.
有没有办法可以运行声纳扫描,但是数据是在我选择的日期而不是当前日期输入的,所以它会显示在我的声纳时间线中的适当位置?
我使用context:property-placeholder通过属性文件加载各种值.我可以使用Spring注入和记录的属性而不会出错,但是当我尝试在MEL表达式中对它们进行求值时,我会收到异常:
<spring:beans>
<spring:bean id="someId" class="com.myClass">
<!-- This works just fine -->
<spring:constructor-arg index="0" value="${myVariable}" />
</spring:bean>
</spring:beans>
<flow name="myFlow">
<!-- exception here -->
<choice>
<when expression="#[${myVariable} == 'setting1']">
<logger message="setting1 selected" level="WARN"/>
</when>
<otherwise>
<logger message="setting1 NOT selected" level="WARN"/>
</otherwise>
</choice>
</flow>
Run Code Online (Sandbox Code Playgroud)
错误是:
org.mule.exception.DefaultMessagingExceptionStrategy: Caught exception in Exception Strategy: null
java.lang.NullPointerException
at org.mule.routing.filters.ExpressionFilter.getFullExpression(ExpressionFilter.java:140)
Run Code Online (Sandbox Code Playgroud)
关于如何在MEL表达式中检查导入属性的值的任何想法?
这是完整的堆栈:
ERROR 2013-06-17 12:36:52,114 [defaultHttpConnector.receiver.02] org.mule.exception.DefaultMessagingExceptionStrategy: Caught exception in Exception Strategy: null
java.lang.NullPointerException
at org.mule.routing.filters.ExpressionFilter.getFullExpression(ExpressionFilter.java:140)
at org.mule.routing.filters.ExpressionFilter.accept(ExpressionFilter.java:104)
at org.mule.routing.ChoiceRouter.selectProcessors(ChoiceRouter.java:35)
at org.mule.routing.AbstractSelectiveRouter.process(AbstractSelectiveRouter.java:194)
at org.mule.processor.chain.DefaultMessageProcessorChain.doProcess(DefaultMessageProcessorChain.java:99)
at org.mule.processor.chain.AbstractMessageProcessorChain.process(AbstractMessageProcessorChain.java:66)
at … 我需要检查会话变量是否存在.我可以检查它是否存在并设置为变量:
<when expression="#[sessionVars['foo'] == 'true']">
Run Code Online (Sandbox Code Playgroud)
但是我想要这样的东西:
<when expression="#[sessionVars['foo']]">
-- or --
<when expression="#[Exists(sessionVars['foo'])]">
Run Code Online (Sandbox Code Playgroud)
因为,有时'foo'没有赋值变量.
有任何想法吗?
给出以下两个可执行脚本:
----- file1.sh
#!/bin/sh
. file2.sh
some_routine data
----- file2.sh
#!/bin/sh
some_routine()
{
#get the data passed in
localVar=$1
}
Run Code Online (Sandbox Code Playgroud)
我可以将'data'传递给另一个脚本中的子例程,但我也想返回数据.
是否可以从some_routine返回信息?
e.g: var = some_routine data
Run Code Online (Sandbox Code Playgroud) 我正在尝试执行上传到AWS实例的脚本.如果我在MacBook终端中运行以下命令,则成功:
ssh -o StrictHostKeyChecking=no -i ~/.ec2/my.pem ec2-user@ec2-<address>.amazonaws.com "chmod u+x ./myScript.sh"
Run Code Online (Sandbox Code Playgroud)
我将相同的命令移植到本地计算机上的简单shell脚本,在那里我传递信息:
#!/bin/sh
# myLocalScript.sh
host=$1
pem=$2
fileName=$3
ssh -o StrictHostKeyChecking=no -i $pemkey ec2-user@$host "chmod u+x ./$fileName"
Run Code Online (Sandbox Code Playgroud)
当我使用此命令运行它时:
sh myLocalScript.sh ec2-user@ec2-<address>.amazonaws.com ~/.ec2/my.pem myScript.sh
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Warning: Identity file ec2-user@ec2-<address>.amazonaws.com not accessible: No such file or directory.
ssh: Could not resolve hostname chmod u+x ./myScript.sh: nodename nor servname provided, or not known
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我希望能够做类似以下的事情:
<spring:beans>
<spring:bean id="myBean" class="com.address.myClass"/>
</spring:beans>
<choice>
<when expression="myBean.myMethod() == true" evaluator="someEvaluator">
<!-- do some stuff -->
</when>
</choice>
Run Code Online (Sandbox Code Playgroud)
如果"myBean.myMethod()"返回true,我想调用'some stuff'.
可以这样做吗?
------更新------
大卫非常友好地帮助我解决这个问题.由于它埋没在下面的评论中,我在这里添加了解决方案:
<when expression="muleContext.getRegistry().lookupObject('myBean').myMethod()==true" evaluator="groovy">
Run Code Online (Sandbox Code Playgroud)