Stream的javadoc说明:
Streams有一个BaseStream.close()方法并实现AutoCloseable,但几乎所有的流实例实际上都不需要在使用后关闭.通常,只有源为IO通道的流(例如Files.lines(Path,Charset)返回的流)才需要关闭.大多数流都由集合,数组或生成函数支持,不需要特殊的资源管理.(如果流确实需要关闭,则可以在try-with-resources语句中将其声明为资源.)
因此,绝大多数情况下,人们可以在单行中使用Streams,collection.stream().forEach(System.out::println);但是对于Files.lines和其他资源支持的流,必须使用try-with-resources语句或泄漏资源.
这让我觉得容易出错并且不必要.因为Streams只能迭代一次,所以在我看来,没有一个迭代后Files.lines不应该关闭输出的情况,因此实现应该只是在任何终端操作结束时隐式调用close .我错了吗?
我svn diff -c 789用来显示我们软件的修订版789所做的更改,但它显示了很多我不关心的文件,特别是测试文件.如何从diff中排除某些文件,例如所有与模式匹配的文件*Test.java?
我在Windows上使用Cygwin,如果这很重要的话.
com.google.common.collect.HashBiMap的文档未说明它是否是线程安全的.我想这意味着它不是,但我想如果我错了,我会问.
我目前正在开发一个代码库,其中有一些变量类,比如数据库路径,它们只是表示为字符串.这些(非)类型的大多数操作都在实用程序类中定义.
我创建了一个新类来表示一个数据库,其操作定义为实例方法,采用传统的OOP方式.但是,通过大型代码库并重构它以使用新类型是相当费力的.有没有人对如何快速有效地做到这一点有任何建议?
当我调用mvn dependency:tree我的项目时,我收到以下警告和错误:
[警告] com.sun.xml.stream.buffer的POM:streambuffer:jar:0.4无效,传递依赖项(如果有)将不可用,启用调试日志记录以获取更多详细信息
[警告] org.jvnet.staxex:stax-ex:jar:1.0的POM无效,传递依赖项(如果有)将不可用,启用调试日志记录以获取更多详细信息
[错误]无法在项目rdbms-service上执行目标org.apache.maven.plugins:maven-dependency-plugin:2.1:tree(default-cli):执行default-cli of goal org.apache.maven.plugins:maven -dependency-plugin:2.1:树失败:对于工件{org.jvnet.staxex:stax-ex:null:jar}:版本不能为空. - > [帮助1]
但是因为树构建失败,我不知道哪个依赖项正在拉动这些无效的依赖项.有没有办法找出来?
我已经尝试将这些罐子排除在外mvn dependency:tree -Dexcludes=*stream.buffer,*staxex,但这并没有什么区别.
我的团队希望能够清楚地看到包中的哪些类是公开的.遗憾的是,在Netbeans项目视图中似乎没有这种可视化指示.有没有办法添加我们想要的行为?如果没有,插件API是否允许我编写一个自己添加此行为的插件?
或者,还有哪些其他解决方案可以对包中类的可见性和依赖性进行基本的高级查看?进入每个班级,检查其可见性,并进行"查找用法"并不方便.
java netbeans netbeans-plugins dependency-management class-visibility
我有一个带有两个空格缩进的JSX文件,但IntelliJ不断添加四个空格缩进.更改Settings>Editor>Code StyleJavascript,HTML和"其他文件类型"似乎不会影响这一点.
如何更改JSX文件的代码样式?
在我的机器上,以下代码段:
DateTime now = DateTime.now();
System.out.println(now);
System.out.println("Date size:\t\t"+serialiseToArray(now).length);
System.out.println("DateString size:\t"+serialiseToArray(now.toString()).length);
System.out.println("java.util.Date size:\t"+serialiseToArray(new Date()).length);
Duration twoHours = Duration.standardHours(2);
System.out.println(twoHours);
System.out.println("Duration size:\t\t"+serialiseToArray(twoHours).length);
System.out.println("DurationString size:\t"+serialiseToArray(twoHours.toString()).length);
Run Code Online (Sandbox Code Playgroud)
给出以下输出:
2013-09-09T15:07:44.642+01:00
Date size: 273
DateString size: 36
java.util.Date size: 46
PT7200S
Duration size: 107
DurationString size: 14
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,org.joda.time.DateTime对象比它的String形式大5倍以上,它似乎完美地描述了它,并且java.util.Date等价.表示2小时的Duration对象也比我预期的要大得多,因为查看源它似乎唯一的成员变量是单个long值.
为什么这些序列化对象如此之大?是否有任何预先存在的解决方案来获得更小的代表?
serialiseToArray方法,供参考:
private static byte[] serialiseToArray(Serializable s)
{
try
{
ByteArrayOutputStream byteArrayBuffer = new ByteArrayOutputStream();
new ObjectOutputStream(byteArrayBuffer).writeObject(s);
return byteArrayBuffer.toByteArray();
}
catch (IOException ex)
{
throw new RuntimeException(ex);
}
}
Run Code Online (Sandbox Code Playgroud) 我想传递一个扩展Throwable到方法的类的集合.但是,我的尝试无法使用jdk1.6.0_39在Netbeans中编译:
package com.memex.sessionmanager;
import java.util.Collection;
import java.util.Collections;
public class GenericsDemo
{
public void foo(Collection<Class<? extends Throwable>> c)
{
}
public void bar()
{
foo(Collections.singleton(RuntimeException.class));
}
}
Run Code Online (Sandbox Code Playgroud)
编译说foo(java.util.Collection<java.lang.Class<? extends java.lang.Throwable>>) in com.memex.sessionmanager.GenericsDemo cannot be applied to (java.util.Set<java.lang.Class<java.lang.RuntimeException>>).
我可以通过将调用代码更改为:
foo(Collections.<Class<? extends Throwable>>singleton(RuntimeException.class));
Run Code Online (Sandbox Code Playgroud)
但我宁愿不强迫客户写这个钝的泛型类型.是否有可能编写一个方法,它将采用哪种类的子类型Throwable?
编辑:
有人用方法签名修复了上面的例子:
public <T extends Throwable> void foo(Collection<Class<T>> c) {}
Run Code Online (Sandbox Code Playgroud)
但是我现在在使用参数时遇到了问题.具体来说,我想将它分配给一个字段,如下所示:
package com.memex.sessionmanager;
import java.util.Collection;
import java.util.Collections;
public class GenericsDemo
{
private Collection<Class<? extends Throwable>> throwables;
public <T extends Throwable> …Run Code Online (Sandbox Code Playgroud) 我有两个类,Foo和Bar,带有类型声明:
class Foo<T>
class Bar<Foo>
Run Code Online (Sandbox Code Playgroud)
这会导致编译器警告,因为Bar中的Foo参数不是参数化的.理想情况下,我想避免编译器警告,但我确实希望Bar接受任何Foo.所以我尝试了这个:
class Foo<T>
class Bar<Foo<?>>
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,但我担心我可能会有一个微妙的差异.在那儿?
java ×8
coding-style ×2
generics ×2
batch-file ×1
collections ×1
comments ×1
dependencies ×1
diff ×1
guava ×1
java-8 ×1
java-stream ×1
jodatime ×1
maven ×1
netbeans ×1
oop ×1
react-jsx ×1
reactjs ×1
refactoring ×1
stream ×1
string ×1
svn ×1
types ×1