Tag: java 8

Consumer 在HashMap中映射了Class

我想创建一个IdentityHashMap<Class, Consumer> 。 基本上,我想用一种方法来映射一个类型,说明如何处理这种类型。 我想动态地能够用对象X说出来,执行Y.我能做到 private IdentityHashMap<Class, Consumer> interceptor = new IdentityHashMap(); 但它很糟糕,因为那时我必须在使用它时将对象投射到lamba中。 例: interceptor.put(Train.class, train -> { System.out.println(((Train)train).getSpeed()); }); 我想做的是 private IdentityHashMap<Class, Consumer> interceptor = new IdentityHashMap(); 但似乎不允许这样做。 有没有办法做到这一点 ? 使用此类型的方法映射类型的最佳解决方法是什么?

旧的JaxB和JDK8 Metaspace OutOfMemory问题

我们正在开发自10年以来开发的业务应用程序(100万+ LOC)。 在切换到JDK8时,我们遇到了JDK8的元空间问题。 这似乎与com.sun.xml.ws:webservices-rt:1.4(Metro 1.4)中引用的JaxB-Version有关。 由于应用程序中的密切链接以及通过JaxB创建类/实例的传统,因此在旧库中快速切换并不简单。 目前我们正在研究这个问题。 我们创建了一个重现此行为的示例程序: import java.io.ByteArrayInputStream; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class X { private static final String XML = “”; @XmlAttribute String test; public static void main( String[] args ) throws JAXBException, InterruptedException { System.out.println(“start”); while ( true ) { JAXBContext jc = […]

可选与null。 Java 8中Optional的目的是什么?

在Java 8中,您可以返回Optional而不是null 。 Java 8文档说可选是“容器对象,它可能包含或不包含非空值。如果存在值,isPresent()将返回true,get()将返回该值。” 在实践中,为什么这有用? 此外,是否有任何使用null情况? 性能怎么样?

将静态库与JNI链接

Java 8之前的Java版本要求本机代码位于共享库中,但我已经阅读了Java 8,可以将静态链接库与JNI一起使用。 我搜索了一些例子,却找不到任何例子。 如何将JNI库静态链接到我的java应用程序?

java Lambda与Anonymous类之间的执行时间差异很大

我对同一个匿名类创建java8 lambda实例的性能感到好奇。 (在win32 java build 1.8.0-ea-b106上执行测量)。 我创建了一个非常简单的示例,并测量java是否在创建lambda表达式时提出了一些new运算符的优化: static final int MEASURES = 1000000; static interface ICallback{ void payload(int[] a); } /** * force creation of anonymous class many times */ static void measureAnonymousClass(){ final int arr[] = {0}; for(int i = 0; i < MEASURES; ++i){ ICallback clb = new ICallback() { @Override public void […]

如何从JavaFX中的另一个控制器类访问UI元素?

我有一个用NetBeans 8编写的JavaFX / Java 8应用程序(没有SceneBuilder )。 我的应用程序有一个主窗口,它有自己的FXML文件(primary.fxml)和它自己的控制器类(FXMLPrimaryController.java)。 FXML中的一个项目是TextArea 。 FXMLPrimaryController.java中的一些方法是关于附加到TextArea 。 此应用程序现在生成第二个窗口(另一个“阶段”),其中包含自己的FXML(second.fxml)和自己的控制器类(FXMLsecondController.java)。 在第二个控制器类中,如何访问主要的TextArea? 以下是相关代码的示例: primary.fxml: FXMLPrimaryController.java: public class FXMLPrimaryController implements Initializable { @Override public void initialize(URL url, ResourceBundle rb) { } @FXML private TextArea myArea; final public void writeToTextArea() { myArea.appendText(“hi!”); } @FXML private void openSecondWindow(ActionEvent event) throws Exception { Group root = new Group(); […]

Java 8函数式编程中’reduce’函数的第三个参数的目的

在什么情况下,在Java 8流中调用’reduce’的第三个参数? 下面的代码尝试遍历字符串列表并添加每个字符串的第一个字符的代码点值。 似乎永远不会使用最终lambda返回的值,如果插入println,它似乎永远不会被调用。 该文档将其描述为“组合器”,但我无法找到更多细节…… int result = data.stream().reduce(0, (total,s) -> total + s.codePointAt(0), (a,b) -> 1000000);

Lambda在经典的Operation enum例子中

正如你们许多人所知,有一个典型的Operation enum例子(现在使用Java 8标准接口),如下所示: enum Operation implements DoubleBinaryOperator { PLUS(“+”) { @Override public double applyAsDouble(final double left, final double right) { return left + right; } }, MINUS(“-“) { @Override public double applyAsDouble(final double left, final double right) { return left – right; } }, MULTIPLY(“*”) { @Override public double applyAsDouble(final double left, final double right) […]

具有非SAM接口的lambdas的Java习惯用法

在Java中,使用lambda而不是匿名类可以优雅地实现具有单个抽象方法(即SAM类型或function接口)的接口: // SAM ActionListener with anonymous implementation button.addActionListener( new ActionListener(){ public void actionPerformed(Event e){ System.out.println(“button via anon!”); } } ); 可以替换为: // SAM ActionListener with lambda implementation button.addActionListener( e -> System.out.println(“button via lambda!”) ); 但是对于具有多个抽象方法的接口,无法直接应用lambda。 例如, java.awt.event.WindowListener有七种方法。 但通常一块代码只对定义这七种方法中的一种感兴趣。 要使用匿名类覆盖来实现行为,我们可以: // non-SAM with adapter implementation with override window.addWindowListener( new WindowAdapter() { @Override public void windowOpened(Event e){ […]

为什么这个java 8流操作求值为Object而不是List 或只是List?

我正在使用3d派对库,他们返回缺少类型规范的集合(例如public List getFoo(); ),并且我正在尝试转换它们的返回类型并返回具有适当类型的列表。 我创建了一个演示问题的简单示例。 例如 编辑原始问题将l2声明为ArrayList而不是List ,现在已更正。 import java.util.List; import java.util.ArrayList; import java.util.stream.Collectors; public class Foo { public static void main(String[] args) { ArrayList l = new ArrayList(); l.add(1); l.add(2); List l2 = l.stream().map(Object::toString).collect(Collectors.toList()); } } 这无法编译。 $ javac Foo.java Foo.java:10: error: incompatible types: Object cannot be converted to List List l2 = l.stream().map(Object::toString).collect(Collectors.toList()); […]