在Java中的for-each语句中忽略循环变量是否被认为是糟糕的样式/劝阻?
我有一些代码看起来有点像下面这样:
public void makeChecklist( final List<File> inputSrcs ){
for( File src : inputSrcs ){
System.out.print( src.getName() + "\t" );
}
System.out.println();
for( File src : inputSrcs ){
//Not using "src" in this body!
System.out.print( "[ ]\t" );
}
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
这是一个坏主意吗?有什么理由不这样做吗?它看起来比使用常规for循环更清晰.
PS-假设对于上面的例子我希望复选框出现在名称下面,这个例子被设计为尽可能简单地说明我的问题.
我的xml文件的测试样本如下所示:
的test.xml
<feed>
<entry>
<title>Link ISBN</title>
<libx:libapp xmlns:libx="http://libx.org/xml/libx2" />
</entry>
<entry>
<title>Link Something</title>
<libx:module xmlns:libx="http://libx.org/xml/libx2" />
</entry>
</feed>
Run Code Online (Sandbox Code Playgroud)
现在,我想编写一个xquery,它将找到所有<entry>具有<libx:libapp>子元素的元素.然后,对于所有这样的条目,如果标题包含给定的关键字(例如链接),则返回标题.因此,在我的示例xml文档中,xquery应该返回"Link ISBN".
我的示例xquery如下所示:
samplequery.xq(此处doc_name是上面显示的xml文件,libapp_matchkey是关键字,例如'Link')
declare namespace libx='http://libx.org/xml/libx2';
declare variable $doc_name as xs:string external;
declare variable $libpp_matchkey as xs:string external;
let $feeds_doc := doc($doc_name)
for $entry in $feeds_doc/feed/entry
(: test whether entry has libx:libapp child and has "Link" in its title child :)
where ($entry/libx:libapp and $entry/title/text()[contains(.,$libapp_matchkey)])
return $entry/title/text()
Run Code Online (Sandbox Code Playgroud)
此xquery返回null而不是预期的结果'Link ISBN'.这是为什么?
我想以编程方式检查对象是否满足其javax.persistance注释所指定的内容.我正在为Hibernate DAO 创建一个假的单元测试用途.然而,有一个缺陷没有被单元测试捕获,因为假的没有检查@Column注释中字段的长度,Hibernate做了.
显然,我可以添加代码来手动检查这些字段,但我宁愿使用一种方法来检查所有这些字段,因此如果值发生变化,它将是最新的.我尝试使用javax.validation.Validator与Apache的Bean验证,但验证没有发现问题.是否有一个函数可以在不调用完整的Hibernate会话的情况下进行测试?
为了清楚起见,我感兴趣的是模拟Hibernate的"类型检查"而不是bean验证本身,这只是我试图用来执行检查的东西.
import javax.validation.Validation;
@Test( expected = IllegalArgumentException.class )
public shouldComplainBecauseOfNullsOrLength(){
AclPermission acl = new AclPermission();
acl.setTarget( "I am way tooo long for this field . " );
if( ! Validation.buildDefaultValidatorFactory().getValidator().validate( acl ).isEmpty() )
throw new IllegalArgumentException();
fail( "Should have had a problem with null values." );
}
Run Code Online (Sandbox Code Playgroud)
目前使用此代码,我宁愿用更强大的东西替换.
for( String fieldName : new String[]{ "target", "action", "recipient" } ){
final Field field = AclPermission.class.getDeclaredField( fieldName );
field.setAccessible( true );
final …Run Code Online (Sandbox Code Playgroud) public static <T> List<T> repeat(T contents, int length) {
List<T> list = new ArrayList<T>();
for (int i = 0; i < length; i++) {
list.add(contents);
}
return list;
}
Run Code Online (Sandbox Code Playgroud)
这是我们的专有公共库中的实用方法.它对于创建列表很有用.例如,我可能想要一个包含68个问号的列表来生成大型SQL查询.这使您可以在一行代码中执行此操作,而不是四行代码.
在java/apache-commons中是否有一个实用程序类已经这样做了?我浏览了ListUtils,CollectionUtils,Arrays,Collections,几乎我能想到的一切,但我无法在任何地方找到它.我不喜欢在我的代码中保留通用实用程序方法,如果可能的话,因为它们通常是apache库的冗余.
我遇到了一个奇怪的错误。我在同一个包中有 2 个类,但它们无法找到彼此。据我记得,只要类位于同一个包中,它们就应该能够调用彼此的方法。
我的代码看起来与此类似:
在A.java中:
package com.mypackage;
public class A{
public static int read(){
//some code
}
}
Run Code Online (Sandbox Code Playgroud)
在B.java中:
package com.mypackage;
public class B{
public static void main(String args[]){
int x = A.read();
}
}
Run Code Online (Sandbox Code Playgroud)
它给了我一个cannot find symbol variable A错误。
这两个类都依赖于一些.jar文件,但我已经包含了这些 jar 的路径CLASSPATH并A.java编译得很好,但由于某些原因 B 找不到 A...
当我删除package com.mypackage;两个类中的 时,它们编译得很好。
我有一个带有一些值的Redis列表
LRANGE LIST 0 -1
> 1
> 2
> 3
Run Code Online (Sandbox Code Playgroud)
我想把RPUSH这些值放到另一个列表中.如何才能做到这一点?我试图做到这一点的MULTI和EXEC,但没有结果.
我有一个类,其闭包定义为:
void everyPixel( closure ){
for( def x : 0..width-1 )
for( def y : 0..height-1 )
closure( x, y )
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将@CompileStatic注释应用于它,它将不会编译(它在我添加闭包之前做了),并带有以下消息:
Groovyc:[静态类型检查] - 找不到匹配方法java.lang.Object #call(java.lang.Integer,java.lang.Integer).请检查声明的类型是否正确以及方法是否存在.
如何为此创建类型签名以便静态编译?到目前为止,我在Google上的所有点击都说明了如何传递闭包,而不是如何定义接受闭包的方法.: - /
在Log4j中,很容易在应用程序中将不同的包记录在不同的级别(这对于调试尤其有用).除了创建自己的过滤器之外,还有一种简单的方法吗?
我尝试在根标记内创建一个标记,或者在其名称之后创建一个标记(即让人联想到Log4J),然后将其中的appender放入其中,但它不起作用.
那么,是否内置了LogBack方法来定义不需要自定义过滤器实现的某些包的记录器和/或日志记录级别?
我目前正在尝试使用PHPWord库及其模板系统处理 docx 文件。我已经找到并更新了这个库的路径(不记得名字,但它不重要)可以处理表(复制它的行,然后在每一行上使用 PHPWord 的标准 setValue())。
如果我创建自己的文档,xml中的数据是正常结构,所以要替换的变量 ${variable} 在它自己的标签中,如下所示:
<w:tbl>
<w:tr>
...
${variable}
</w:tr>
</w:tbl>
Run Code Online (Sandbox Code Playgroud)
我简化了代码,在实际代码中还有许多其他标签描述大小、样式等。
我的问题是我必须从其他人那里处理文件,我被禁止进行重大更改,我得到了一份文件,其中在某些时候它们是一个带有一个空白行的表格。我添加了 ${variable} 变量并通过 PHPWord 运行它。问题是,它失败了。经过一番研究,我发现源 XML 如下所示:
....
...
${va
...
riab
...
le}
....
Run Code Online (Sandbox Code Playgroud)
(再次大大简化,但你得到了图片)
这种结构对我来说是个问题,因为克隆行的函数使用 strpos()、substr() 和正则表达式来工作,并且不适用于这种结构(我无法想象这样做的优雅方式)。
所以问题是 - 有谁知道为什么 docx 这样做以及如何阻止他?我正在通过 word 而不是 PHP 寻找解决方案(我需要当前的函数无需太多编辑即可工作)
在维基百科上,我读到关联关系是一个实例级关系,所以我们讨论的是两个类的对象之间的关系.
当我们实际绘制类图时,为什么我们在类元素或块而不是对象上使用关联?还有类级别关系,我们再次使用类元素.由于我们没有任何方式来表明我们是在谈论对象还是类,我发现这令人困惑.例如:我听过有人说"关联这两个班级"这听起来不错吗?