小编AqD*_*AqD的帖子

Java 8:泛型类型推断在方法引用上失败?

谁能告诉我为什么以下代码无法编译但 lambda 版本可以:

是否有关于泛型类型推断的规则?我应该避免什么?

失败的:

EntityLayerManager.refreshLayerRenderables(
        wwd, this.networkNodeShapeLayer, nodeMap.values(),
        MissionDetailUIConst::createNetworkNodeRenderable,
        MissionDetailUIConst::updateNetworkNodeRenderable) // <<== FAILED 
Run Code Online (Sandbox Code Playgroud)

成功(使用普通 lambda):

EntityLayerManager.refreshLayerRenderables(
        wwd, this.networkNodeShapeLayer, nodeMap.values(),
        MissionDetailUIConst::createNetworkNodeRenderable,
        (e, coll) -> MissionDetailUIConst.updateNetworkNodeRenderable(e, coll));
Run Code Online (Sandbox Code Playgroud)

成功(指定通用参数):

EntityLayerManager.<EwmsVwNetworkNodeEntity, KolladaRoot>refreshLayerRenderables(
        wwd, this.networkNodeShapeLayer, nodeMap.values(),
        MissionDetailUIConst::createNetworkNodeRenderable,
        MissionDetailUIConst::updateNetworkNodeRenderable)
Run Code Online (Sandbox Code Playgroud)

参考方法:

public static <E, R extends Renderable> int refreshLayerRenderables(WorldWindow wwd,
        RenderableLayer renderableLayer, Collection<E> entityList,
        Function<E, ? extends Collection<? extends R>> createRenderables,
        BiPredicate<E, Collection<R>> updateRenderables);

public static Collection<KolladaRoot> createNetworkNodeRenderable(EwmsVwNetworkNodeEntity networkNode);

public static boolean updateNetworkNodeRenderable(EwmsVwNetworkNodeEntity networkNode, Collection<KolladaRoot> colladaRootCollection);
Run Code Online (Sandbox Code Playgroud)

java generics type-inference java-8 ecj

5
推荐指数
1
解决办法
834
查看次数

JavaFX:没有 JavaFX 样式属性的可编辑 TableView

在阅读了许多涉及 setOnEditCommit 的可编辑 TableView 解决方案后,我今天对 Oracle 非常生气,这不是应该完成的正确方式。

以下是我在挖掘 JavaFX 源代码后发现的一个更好、更简单的解决方案:

java javafx tableview

3
推荐指数
1
解决办法
3304
查看次数

标签 统计

java ×2

ecj ×1

generics ×1

java-8 ×1

javafx ×1

tableview ×1

type-inference ×1