以下测试之一不起作用。 为什么? 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 { } […]
我正在将一个项目从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流应用过滤? 示例 :考虑此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, […]
假设我有一个使用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 […]
我想在我的机器上安装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吗?
我的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表达式的引用并返回一个布尔值,说明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到目前为止,根据我的报告创建了一个错误: […]
我正在尝试关注Selenium的一些教程,但此时却感到难过。 右键单击“项目”,然后选择“属性”。 在Properties对话框中,单击“Java Build Path”。 单击Libraries选项卡,然后单击“Add External JARs .. Add External JARS按钮显示为灰色并禁用。 该对话框显示Modulepath和Classpath。 如果我选择其中任何一个,则启用按钮。 问题是,我选哪一个? 我正在尝试将selenium WebDriver添加到Java Build Path中。
关于劈开者的问题乍一看并不简单。 在流中, .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, […]