我对stackoverflow的第一个问题,我退出了;)
使用流链时,通常最好只关闭链中的最后一个流,因为close()操作应该在链的所有流中传播。
将try-with-source语句和流链接结合在一起时,什么被认为是好的做法?
a)在try语句中创建所有流:
try (InputStream processIn = p.getInputStream();
InputStreamReader inReader = new InputStreamReader(processIn);
BufferedReader input = new BufferedReader(inReader)) {
.
.
}
Run Code Online (Sandbox Code Playgroud)
或b)只是链中的最后一个成员:
InputStream processIn = p.getInputStream();
InputStreamReader inReader = new InputStreamReader(processIn);
try (BufferedReader input = new BufferedReader(inReader)) {
.
.
}
Run Code Online (Sandbox Code Playgroud)
我猜这两个版本最终都可以使用,但是我假设a)会生成重复的close()调用,不是吗?
我试图设置在4.11的JUnit一个参数测试,其生成单一的参数.但是,此参数必须是数组本身.
以下代码片段的预期行为test()是在第一次运行中arguments保存数组{"test1", "test2"}并{"test3", "test4"}在第二次运行中保存数组时运行两次.
@RunWith(Parameterized.class)
public class Tester {
@Parameter
private String[] arguments;
@Parameters
public static Iterable<Object[]> data() {
return Arrays.asList(
new Object[][]{
{new String[] {"test1","test2"}},
{new String[] {"test3","test4"}}
}
);
}
@Test
public void test() {
fail();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我执行测试时,SlowCheckMemberAccess会抛出异常.Google没有针对此类问题提供任何结果.
任何人都可以解释这里出了什么问题吗?
未经过滤的JUnit跟踪是:
java.lang.IllegalAccessException: Class org.junit.runners.Parameterized$TestClassRunnerForParameters can not access a member of class org.mafagafogigante.dungeon.entity.creatures.Tester with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(Unknown Source)
at java.lang.reflect.AccessibleObject.checkAccess(Unknown Source)
at java.lang.reflect.Field.set(Unknown …Run Code Online (Sandbox Code Playgroud)