小编keo*_*eos的帖子

使用Binding.scala宏注释时如何在编辑器中抑制intellij IDEA错误?

尽管它在sbt控制台中编译并运行.Intellij抱怨我应该在编辑器中使用Binding [Node]而不是Elem.

@dom def renderDiv: Binding[Div] = <div>...</div>
Run Code Online (Sandbox Code Playgroud)

从intellij IDEA的角度来看,此方法返回的Elem是一个子类型scala.xml.Node,但在渲染时:

dom.render(document.getElementById("root"),renderDiv)
Run Code Online (Sandbox Code Playgroud)

它需要一个org.scalajs.dom.raw.Node.

这有什么解决方法吗?

dom scala web-frontend scala.js binding.scala

2
推荐指数
1
解决办法
354
查看次数

java编译器有多聪明?关于枚举方法的问题

考虑这种情况:

STYLE1:

static enum Style1{
    FIRE_BALL {
        @Override
        public boolean isCold() {
            return false;
        }
    },ICE_BALL {
        @Override
        public boolean isCold() {
            return true;
        }
    },FIRE_ARROW {
        @Override
        public boolean isCold() {
            return false;
        }
    },ICE_ARROW {
        @Override
        public boolean isCold() {
            return true;
        }
    };
    public abstract boolean isCold();
}
Run Code Online (Sandbox Code Playgroud)

蓝紫魅力:

static enum Style2{
    FIRE_BALL,ICE_BALL,FIRE_ARROW,ICE_ARROW;
    public boolean isCold(){
        //return this.toString().contains("ICE")?true:false; //sorry
        return this.toString().contains("ICE");
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我只是想知道它是否冷.所以我要问:

编译器可以知道目标结果和常量折叠Style2吗?

如果没有,Style1应该显然更快,但更冗长.假设这是更复杂的情况,并且有更多的组合,例如BIG_FIRE_SLOW_BALL与isFast(),isBig(),Style1将以代码块结束.


所以我用jmh和jUnit做了一些测试:

与jmh:

@Benchmark
public boolean testStyle1() {
    return Style1.values()[ThreadLocalRandom.current().nextInt(4)].isCold();
}

@Benchmark …
Run Code Online (Sandbox Code Playgroud)

java compiler-construction enums

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