当尝试使用 Java 21 配置项目时,我收到错误:
不支持 Java。您的构建当前配置为使用 Java 21 和 Gradle 8.3。
不幸的是,目前官方文档中没有信息:https ://docs.gradle.org/current/userguide/compatibility.html
执行 Gradle 需要 8 到 20 之间的 Java 版本。尚不支持 Java 21 及更高版本。
Gradle 从哪个版本开始支持 Java 21?
例如,我需要类似的东西:
Collection<String> collection = /* ... */;
Stream<Object> stream = /* ... */;
boolean containsAll = stream.map(Object::toString).containsAll(collection);
Run Code Online (Sandbox Code Playgroud)
当然,我可以Collection使用collect()方法和调用将流的所有元素累积到另一个元素中Collection.containsAll(),但是如果流太大并且处理所有元素的效率低下怎么办?
假设我们有以下测试代码:
import org.jetbrains.annotations.NotNull;
import org.junit.Test;
public class NullTest {
@Test
public void testNull() {
doNothing(null);
}
private @NotNull String doNothing(@NotNull String value) {
return value;
}
}
Run Code Online (Sandbox Code Playgroud)
gradle test直接运行或IDEA将操作委托给gradle 时,测试将通过。但是,IllegalArgumentException: Argument for @NotNull parameter 'value' must not be null如果它使用IDEA运行程序(未委托给gradle)运行,则将异常失败。
问题是:如何使通过gradle运行它的测试失败?
假设以下配置:
build.dependencies.gradle:
ext {
libraries = [:]
}
libraries += [
library : [group: 'com.example', name: 'library', version: '1.1.1']
]
Run Code Online (Sandbox Code Playgroud)
build.gradle.kts:
apply(from = "build.dependencies.gradle")
dependencies {
implementation(libraries["library"]) // does not work
}
Run Code Online (Sandbox Code Playgroud)
有没有办法获取 Groovy 脚本提供的值build.gradle.kts?
有没有办法序列化集合及其展开的元素?
例如,我想序列化 unwrapped all components:
class Model {
@JsonProperty
@JsonUnwrapped
Collection<Object> components;
Model(Collection<Object> components) {
this.components = components;
}
static class Component1 {
@JsonProperty
String stringValue;
Component1(String stringValue) {
this.stringValue= stringValue;
}
}
static class Component2 {
@JsonProperty
int intValue;
Component2(int intValue) {
this.intValue= intValue;
}
}
public static void main(String[] args) throws JsonProcessingException {
Model model = new Model(Arrays.asList(new Component1("something"), new Component2(42)));
String json = new ObjectMapper().writeValueAsString(model);
System.out.println(json);
}
}
Run Code Online (Sandbox Code Playgroud)
预期的:
{"stringValue":"something","intValue":42}
但实际结果是:
{"components":[{"stringValue":"something"},{"intValue":42}]}
代码片段的输出
List<Integer> list = List.of(10, 20, 30, 40, 50);
Integer[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
list.toArray(array);
System.out.println(Arrays.toString(array));
Run Code Online (Sandbox Code Playgroud)
是:
[10, 20, 30, 40, 50, 空, 7, 8, 9, 0]
我在方法中找到了以下代码ArrayList.toArray:
if (a.length > size)
a[size] = null;
Run Code Online (Sandbox Code Playgroud)
这种行为的原因是什么?为什么示例中的第五个元素是null,但不是6?
代码片段
val map = mutableMapOf<String, String>()
map.computeIfAbsent(key) { calcValue(it) }
Run Code Online (Sandbox Code Playgroud)
带calcValue签名:
fun calcValue(key: String): String?
Run Code Online (Sandbox Code Playgroud)
编译时出现错误:
类型不匹配:推断类型是 String?但预期是字符串
mappingFunction但回国还是可以接受null的Map.computeIfAbsent。
这是一个错误吗?或者我做错了什么?
java ×7
gradle ×4
kotlin ×2
null ×2
arraylist ×1
arrays ×1
build.gradle ×1
collections ×1
contains ×1
dictionary ×1
groovy ×1
jackson ×1
java-17 ×1
java-21 ×1
java-8 ×1
java-stream ×1
json ×1
jvm ×1
jvm-hotspot ×1
list ×1
openjdk ×1