Tag: java 9

不明确的规则定义了“T …”的类型

以下测试之一不起作用。 为什么? public class SortedInterfacesTest { private static final Logger log = LoggerFactory.getLogger(SortedInterfacesTest.class); void forAll(Consumer consumer, T… values) { } @Test public void firstTest() { forAll(Shape::draw, new MyShape(), new Universal()); } @Test public void secondTest() { log.info(“\njava.version {}”, System.getProperty(“java.version”)); forAll(Picture::draw, new MyPicture(), new Universal()); } interface Shape { void draw(); } interface Marker { } […]

从java8迁移到java9时,对方法的引用是不明确的

我正在将一个项目从JAVA 8迁移到JAVA 9,我在使代码工作时遇到了一些麻烦。 所有工作都在JAVA 8但在9中我遇到以下错误: Error java: reference to ok is ambiguous both method ok(java.util.function.Supplier) and method ok(web.Procedure) match 这是我调用方法时的代码: public ResponseEntity<List> mailTemplateFindAll() { return ok(() -> mailTemplateService.findAll()); } 这是实施: public ResponseEntity ok(Supplier action) { return this.body(HttpStatus.OK, action); } public ResponseEntity ok(T body) { return this.ok(() -> { return body; }); } public ResponseEntity ok(Procedure […]

如何在java流中对groupBy应用过滤

如何先分组,然后使用Java流应用过滤? 示例 :考虑此Employee类:我希望按部门分组,其中包含薪水大于2000的员工列表。 public class Employee { private String department; private Integer salary; private String name; //getter and setter public Employee(String department, Integer salary, String name) { this.department = department; this.salary = salary; this.name = name; } } 这就是我如何做到这一点 List list = new ArrayList(); list.add(new Employee(“A”, 5000, “A1”)); list.add(new Employee(“B”, 1000, “B1”)); list.add(new Employee(“C”, 6000, […]

Java 9 + maven + junit:测试代码是否需要自己的module-info.java以及放置它的位置?

假设我有一个使用Maven 3和junit的Java项目。 有src/main/java和src/test/java目录,分别包含主要源和测试源(一切都是标准的)。 现在我想将项目迁移到Java 9. src/main/java内容代表Java 9模块; com/acme/project/module-info.java看起来大概是这样的: module com.acme.project { require module1; require module2; … } 如果测试代码需要自己的module-info.java怎么办? 例如,添加对某些模块的依赖性,该模块仅用于测试,而不是生产代码。 在这种情况下,我必须将module-info.java放到src/test/java/com/acme/project/给模块一个不同的名称。 这样Maven似乎将主要源和测试源视为不同的模块,因此我必须将包从主模块导出到测试模块,并且需要测试模块中的包,如下所示: 主模块(在src/main/java/com/acme/project ): module prod.module { exports com.acme.project to test.module; } 测试模块(在src/test/java/com/acme/project ): module test.module { requires junit; requires prod.module; } 这产生了 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:testCompile (default-testCompile) on project test-java9-modules-junit: Compilation failure: Compilation […]

为什么Oracle JDK 9下载这么早就结束了?

我想在我的机器上安装JDK 9,访问JDK官方下载页面,很惊讶地看到, Java SE 9已经到了支持终点。 Java SE 9的用户应切换到Java SE 10.请访问我们的Java SE下载页面以获取当前版本的Java SE。 您将在……秒内重定向到Java SE下载页面。 请将书签更新为Java SE下载页面。 我做了一些谷歌搜索和Java发布历史等。但找不到任何具体的原因。 我有几个问题 – Oracle仍在支持JDK 1.8,但是停止向JDK 9发布更新,为什么? 我应该继续使用JDK 1.8一段时间,然后直接切换到JDK 10吗?

org.springframework.cglib.core.ReflectUtils $ 1的非法reflection访问

我的JDK 9 + 181 Spring Boot 2.0.0.BUILD-SNAPSHOT CLI应用程序在启动时显示此警告: WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by org.springframework.cglib.core.ReflectUtils$1 (jar:file:/home/jan/src/fm-cli/target/fm-cli-0.1.0-SNAPSHOT.jar!/BOOT-INF/lib/spring-core-5.0.0.RELEASE.jar!/) to method java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) WARNING: Please consider reporting this to the maintainers of org.springframework.cglib.core.ReflectUtils$1 这是一个控制台应用程序,所以我需要禁用此警告 – 我该怎么做? 注意:此问题询问如何禁用Spring触发此警告的具体问题; 它不是JDK9的副本:发生了非法的reflection访问操作。 org.python.core.PySystemState ,用于处理不同库中的类似症状。

确定lambda表达式在Java中是无状态还是有状态

是否有一个函数接受对lambda表达式的引用并返回一个布尔值,说明lambda表达式是否为无状态? 如何确定lambda表达式的有状态?

私有接口方法的方法参考

请考虑以下代码: public class A { public static void main(String[] args) { Runnable test1 = ((I)(new I() {}))::test; // compiles OK Runnable test2 = ((new I() {}))::test; // won’t compile } interface I { private void test() {} } } 我真的不明白……我明白test()方法是私有的 。 但是如果我们将匿名类转换为其接口((I)(new I() {}))会有什么变化? 更准确地说,我希望看到一个允许该技巧的特定JLS点。 PS我已将其报告为编译器的错误(ID:9052217)。 在我看来, Runnable test2 = ((new I() {}))::test; 应该在这种特殊情况下编译好。 PPS到目前为止,根据我的报告创建了一个错误: […]

Eclipse IDE的Java Build Path已更改。 我选择哪个?

我正在尝试关注Selenium的一些教程,但此时却感到难过。 右键单击“项目”,然后选择“属性”。 在Properties对话框中,单击“Java Build Path”。 单击Libraries选项卡,然后单击“Add External JARs .. Add External JARS按钮显示为灰色并禁用。 该对话框显示Modulepath和Classpath。 如果我选择其中任何一个,则启用按钮。 问题是,我选哪一个? 我正在尝试将selenium WebDriver添加到Java Build Path中。

了解Java 8和Java 9中的顺序流和并行流分裂器

关于劈开者的问题乍一看并不简单。 在流中, .parallel()更改流处理的行为。 但是我期望顺序和并行流创建的分裂器是相同的。 例如, 在顺序流中,通常不会调用.trySplit() ,而在并行流中,它是为了将拆分分裂器移交给另一个线程。 stream.parallel().spliterator()与stream.parallel().spliterator()之间的差异: 它们可能具有不同的特征: Stream.of(1L, 2L, 3L).limit(2); // ORDERED Stream.of(1L, 2L, 3L).limit(2).parallel(); // SUBSIZED, SIZED, ORDERED 这里讨论了另一个无意义的流分裂器特征策略(并行似乎更好地计算): 了解java 8和java 9中的深层分裂器特征 它们在使用.trySplit()分割方面可能有不同的行为: Stream.of(1L, 2L, 3L); // NON NULL Stream.of(1L, 2L, 3L).limit(2); // NULL Stream.of(1L, 2L, 3L).limit(2).parallel(); // NON NULL 为什么最后两个有不同的行为? 如果我愿意,为什么我不能拆分连续流? (例如,丢弃其中一个分割以进行快速处理可能很有用)。 将分裂器转换为流时的重大影响: spliterator = Stream.of(1L, 2L, 3L).limit(2).spliterator(); stream = StreamSupport.stream(spliterator, […]