Tag: java 8

最后的和有效的最终的区别

我在Java 8中玩lambdaexpression式,并且遇到了local variables referenced from a lambda expression must be final or effectively final警告。 我知道当我在匿名类中使用variables的时候,他们在外部类中必须是最终的,但是仍然是 – 最后的和有效的最终的区别是什么?

用谓词限制stream

是否有一个Java 8stream操作限制(可能是无限的) Stream直到第一个元素无法匹配一个谓词? 在下面的例子中看起来像(不存在的) takeWhile操作,并打印所有小于10的数字? IntStream .iterate(1, n -> n + 1) .takeWhile(n -> n < 10) .forEach(System.out::println); 如果没有这样的操作,通用的方法是什么?

::(双冒号)运算符在Java 8中

我正在研究Java 8源代码,发现代码的这个特殊部分非常令人惊讶: //defined in IntPipeline.java @Override public final OptionalInt reduce(IntBinaryOperator op) { return evaluate(ReduceOps.makeInt(op)); } @Override public final OptionalInt max() { return reduce(Math::max); //this is the gotcha line } //defined in Math.java public static int max(int a, int b) { return (a >= b) ? a : b; } Math::max就像一个方法指针? 一个普通的static方法如何转换为IntBinaryOperator ?

javafx 8兼容性问题 – FXML静态字段

我devise了一个javafx应用程序,它在jdk 7中工作正常。当我尝试在java 8中运行它时,出现以下exception: javafx.fxml.LoadException: at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2617) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2595) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3191) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3164) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3140) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3132) Exception in thread "JavaFX Application Thread" java.lang.NullPointerException: Root cannot be null at javafx.scene.Scene.<init>(Scene.java:364) at javafx.scene.Scene.<init>(Scene.java:232) at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238) at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191) at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58) at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114) at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74) at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54) at javafx.event.Event.fireEvent(Event.java:204) at javafx.concurrent.EventHelper.fireEvent(EventHelper.java:219) at javafx.concurrent.Task.fireEvent(Task.java:1357) […]

是否有可能使用Java 8进行Android开发?

在网上search,目前还不清楚Java 8是否支持Android开发。 在我下载/安装Java 8之前,可以有人指出我的任何“官方”文档说Java 8是或不支持Android开发。

抛出异常的Java 8 Lambda函数?

我知道如何创建一个具有String参数的方法的引用,并返回一个int,它是: Function<String, Integer> 但是,如果函数抛出一个异常,就不能工作,比如定义为: Integer myMethod(String s) throws IOException 我将如何定义这个参考?

在Java 8中使用LogManager(l4j2)时出错(java.lang.reflect.AnnotatedElement无法解析)

当我将一个新项目的JDK版本从7u45切换到8u20时,我遇到了一个奇怪的错误。 在我的课程开始时,一个无害的LogManager声明被拒绝,错误如下: The type java.lang.reflect.AnnotatedElement cannot be resolved. It is indirectly referenced from required .class files 这是代码: public class Class1 { private static Logger log = LogManager.getLogger(Class1.class); … Eclipse建议我配置构建路径,但我不知道要配置什么,因为我不知道该错误的基本问题。 使用版本7的JDK,一切工作正常。

用于可选

现在使用Java 8已经有6个多月的时间了,对于新的API更改,我感到非常满意。 我还没有信心的一个领域是什么时候使用Optional 。 我似乎想要在任何地方使用它之间摇摆,可能是null ,根本就没有。 当我可以使用它的时候,似乎有很多情况,我也不确定是否增加了好处(IE可读性/ null安全性),或者只是造成额外的开销。 所以,我举几个例子,我对社区对是否增加好处的想法感兴趣。 1 – 当方法可以返回null时,作为公共方法返回类型: public Optional<Foo> findFoo(String id); 2 – 作为param可能为null的方法参数: public Foo doSomething(String id, Optional<Bar> barOptional); 3 – 作为一个bean的可选成员: public class Book { private List<Pages> pages; private Optional<Index> index; } 4 – 在Collections : 一般来说,我不认为: List<Optional<Foo>> 添加任何东西 – 特别是因为可以使用filter()删除null值等,但是有什么好的用途Optional在集合? 任何我错过的情况?

lambda表达式在每次执行时都会在堆上创建一个对象吗?

当我使用Java 8的新语法糖来迭代一个集合时,比如 myStream.forEach(item -> { // do something useful }); 这不等于下面的“旧语法”片段吗? myStream.forEach(new Consumer<Item>() { @Override public void accept(Item item) { // do something useful } }); 这是否意味着每次迭代集合时都会在堆上创建一个新的匿名Consumer对象? 这需要多少堆空间? 它有什么性能影响? 这是否意味着在迭代大型多级数据结构时,我宁愿使用旧式的循环?