我刚刚安装了Java 8的最终版本.当我尝试使用Maven构建我的项目时,如果我使用Java 8,许多测试都会失败,但是使用Java 7会很好.我尝试通过命令行运行它,并将JAVA_HOME设置为C:\ Program Files\Java\jdk1.8.0并通过Eclipse选择jdk1.8.0作为已安装JRE中的默认JRE.两者都失败了 请注意,失败的测试都使用Drools 6(及其依赖项).
这是输出:
-------------------------------------------------------------------------------
Test set: com.local.lds.rules.LocmChiTest
-------------------------------------------------------------------------------
Tests run: 3, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 1.245 sec <<< FAILURE!
test(com.local.lds.rules.LocmChiTest) Time elapsed: 0.001 sec <<< ERROR!
java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:187)
at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at mockit.internal.util.MethodReflection.invoke(MethodReflection.java:63)
at mockit.Invocation.proceed(Invocation.java:192)
at mockit.integration.junit4.internal.BlockJUnit4ClassRunnerDecorator.createTest(BlockJUnit4ClassRunnerDecorator.java:59)
at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at mockit.internal.util.MethodReflection.invokeWithCheckedThrows(MethodReflection.java:95)
at mockit.internal.mockups.MockMethodBridge.callMock(MockMethodBridge.java:75)
at mockit.internal.mockups.MockMethodBridge.invoke(MockMethodBridge.java:41)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:236)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) …Run Code Online (Sandbox Code Playgroud) 流管道可以顺序执行或并行执行.此执行模式是流的属性.通过初始选择的顺序或并行执行来创建流.
我的假设:
假设这些假设是有效的(对于一些元假设没有错误),在api中暴露执行模式的价值是什么?
看起来您应该只能声明一个Stream,并且顺序/并行执行的选择应该在下面的层中自动处理,可以通过库代码或JVM本身作为运行时可用核心的函数来处理,大小问题等
当然,假设并行流也可以在单个核心机器上运行,也许只是总是使用并行流来实现这一点.但这真的很难看 - 为什么我的代码中的并行流显式引用它是默认选项?
即使存在您故意想要对顺序流进行硬编码的情况 - 为什么不仅仅是SequentialStream为此目的的子接口,而不是Stream使用执行模式切换进行污染?
正如我们在Java 8中所知,引入了功能接口的概念.功能接口有一种abstract方法,可以使用多种默认或静态方法.
但为什么Functional接口只有一个抽象方法呢?如果Interface有多个抽象方法,为什么这不是一个功能接口?
在编写加密实用程序类时,我遇到了以下方法的问题:
public static void destroy(Key key) throws DestroyFailedException {
if(Destroyable.class.isInstance(key)) {
((Destroyable)key).destroy();
}
}
@Test
public void destroySecretKeySpec() {
byte[] rawKey = new byte[32];
new SecureRandom().nextBytes(rawKey);
try {
destroy(new SecretKeySpec(rawKey , "AES"));
} catch(DestroyFailedException e) {
Assert.fail();
}
}
Run Code Online (Sandbox Code Playgroud)
在javax.crypto.spec.SecretKeySpec上述方法的特定情况下可以正常工作,java7因为SecretKeySpec(javadocs 7)没有实现Destroyable(javadocs 7)
现在使用java8类SecretKeySpec(javadocs 8)已经被Destroyable(javadocs 8)和方法Destroyable#destroy现在default哪个很好,根据这个声明
默认方法使您能够向库的接口添加新功能,并确保与为这些接口的旧版本编写的代码的二进制兼容性.
然后代码编译没有任何问题,尽管类ScretKeySpec本身没有被更改,单独的接口SecretKey已经.
问题是oracle's jdk8该destroy方法有以下实现:
public …Run Code Online (Sandbox Code Playgroud) 我正在阅读"Java 8 Lambdas"这本书,并且在某些时候作者说:"由于性能优势,尽可能使用原始专用函数是个好主意."
他在这里指的是mapToInt,mapToLong等.
事情是我不知道性能来自哪里说实话.
我们来看一个例子:
// Consider this a very very long list, with a lot of elements
List<Integer> list = Arrays.asList(1, 2, 3, 4);
//sum it, flavour 1
int sum1 = list.stream().reduce(0, (acc, e) -> acc + e).intValue();
//sum it, flavour 2
int sum2 = list.stream().mapToInt(e -> e).sum();
System.out.println(sum1 + " " + sum2);
Run Code Online (Sandbox Code Playgroud)
因此,在第一种情况下,我使用reduce来对值进行求和,因此BinaryOperator函数将始终接收int(acc)和Integer(集合的当前元素),然后将对整数进行取消装箱int(acc + e)
在第二种情况下,我使用mapToInt,它将每个Integer解包成一个int,然后对它求和.
我的问题是,第二种方法有什么优势吗?当我可以使用地图时,对于int的地图有什么意义呢?
所以是的,这只是糖语法还是有一些性能优势?如果有,请提供一些信息
问候,
使用UTF-8编码创建String时存在不一致.
运行此代码:
public static void encodingIssue() throws IOException {
byte[] array = new byte[3];
array[0] = (byte) -19;
array[1] = (byte) -69;
array[2] = (byte) -100;
String str = new String(array, "UTF-8");
for (char c : str.toCharArray()) {
System.out.println((int) c);
}
}
Run Code Online (Sandbox Code Playgroud)
在Java 1.8.0_20(及更早版本)上,我们得到了结果
65533Run Code Online (Sandbox Code Playgroud)
在Java 1.7和1.6上,我们得到了正确的结果:
57052Run Code Online (Sandbox Code Playgroud)
你遇到过这个错误吗?这有解决方法吗?
这种不一致也表现为Shift_JIS,JIS_X0212-1990,x-IBM300,x-IBM834,x-IBM942,x-IBM942C,x-JIS0208,但显然UTF-8更为紧迫.
在C#中,您可以将lambda表达式包含在表达式树对象中,然后可以解析它.我想知道这在Java中是否也可行?
我正在寻找的是做这样的事情:
BooksRepository.getAll()
.where(b -> b.getIban() == "SomeIban")
.and(b -> b.getAuthor() == "SomeAuthor"); //etc.
Run Code Online (Sandbox Code Playgroud)
然后BooksRepository应该以某种方式将该查询转换为基于指定为lambdas的谓词的以下RESTful API请求:
GET http://mylibrary.com/books?Iban=SomeIban&Author=SomeAuthor
Run Code Online (Sandbox Code Playgroud)
然后将结果返回给客户端.如果在Java中甚至可以实现这一点?
我有以下类描述片段:
...
@Column(name = "invalidate_token_date")
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime invalidateTokenDate;
....
Run Code Online (Sandbox Code Playgroud)
此代码不起作用,因为@Temporal不支持LocalDateTime.我看到的建议如何使用LocalDateTime从乔达时间,但我使用Java 8.
请给我一些建议.
PS
这是我目前的JPA依赖:
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud) 为什么我们在Android Studio 3.0 RC1中出现此错误?
com.android.dx.cf.code.SimException:
default or static interface method used without --min-sdk-version >= 24
Run Code Online (Sandbox Code Playgroud)
根据android文档,"默认和静态接口方法"功能与任何 min-sdk版本兼容.
我将其跟踪到一个调用Comparator.naturalOrder()的java库- 它已经在API级别24中添加了.
所以我不希望在java库中对此代码有任何错误消息.
当我在我自己的android-app或lib java代码中使用代码时,我看到正确的lint消息:"Call需要API级别24"
错误消息是错误的还是我错过了什么?
我正在尝试使用 keytool 生成密钥库并出现以下错误 -
D:\Java\bin>keytool -importkeystore -srckeystore cert1.p12 -srcstoretype pkcs12 -destkeystore cert1.keystore -deststoretype JKS
Enter destination keystore password:
Re-enter new password:
Enter source keystore password:
keytool error: java.io.IOException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48)
Run Code Online (Sandbox Code Playgroud)