小编Tur*_*g85的帖子

Java BigDecimal可能溢出错误

我正在测试一些涉及a的代码的边界条件BigDecimal,我注意到当BigDecimal使用String初始化a时,"1e2147483647"它会出现意外行为.它似乎在0和之间有一个值1e-2147483647.当我试着打电话时intValue(),我得到一个NegativeArraySizeException.我应该注意,这2147483647是我系统上整数的最大值.我做错了什么,或者这是一个问题BigDecimal

BigDecimal test = new BigDecimal("1e2147483647");

test.compareTo(new BigDecimal(0));  //Returns 1
test.compareTo(new BigDecimal("1e-2147483647"));  //Returns -1
test.intValue();  //Throws NegativeArraySizeException
Run Code Online (Sandbox Code Playgroud)

java bigdecimal

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

> vs. = =冒泡排序会导致显着的性能差异

我偶然发现了什么.起初我认为这可能是分支错误预测的情况,就像在这种情况下一样,但我无法解释为什么分支错误预测应该导致这种现象.

我在Java中实现了两个版本的Bubble Sort并进行了一些性能测试:

import java.util.Random;

public class BubbleSortAnnomaly {

    public static void main(String... args) {
        final int ARRAY_SIZE = Integer.parseInt(args[0]);
        final int LIMIT = Integer.parseInt(args[1]);
        final int RUNS = Integer.parseInt(args[2]);

        int[] a = new int[ARRAY_SIZE];
        int[] b = new int[ARRAY_SIZE];
        Random r = new Random();
        for (int run = 0; RUNS > run; ++run) {
            for (int i = 0; i < ARRAY_SIZE; i++) {
                a[i] = r.nextInt(LIMIT);
                b[i] = a[i];
            }

            System.out.print("Sorting with sortA: ");
            long start …
Run Code Online (Sandbox Code Playgroud)

c++ java optimization performance

72
推荐指数
3
解决办法
3596
查看次数

如何控制JavaFX Tooltip的延迟?

我正在玩JavaFX Tooltip.我意识到,就个人而言,徘徊在某些东西和实际出现的工具提示之间的延迟太长了.API中的内容显示:

通常,当鼠标在控件上移动时,工具提示会"激活".工具提示变为"激活"和实际显示之间通常存在一些延迟.详细信息(例如延迟量等)留给Skin实现.

经过一些进一步的调查,我无法找到控制此行为的任何可能性.在JavaFX的CSS参考没有关于延迟时间和运行时间,评价信息getCssMetaData()没有帮助.

我知道,有一种方法可以通过onMouseEntered和手动控制工具提示onMouseExited,但是真的没有别的方法吗?或者我错过了一个明显的选择?

css java fxml javafx-8

28
推荐指数
6
解决办法
2万
查看次数

为什么这个内循环4X在通过外循环的第一次迭代中更快?

我试图重现这里描述的一些处理器缓存效果.我知道Java是一个托管环境,这些例子不会完全翻译,但我遇到了一个奇怪的例子,我试图提炼出一个简单的例子来说明效果:

public static void main(String[] args) {
    final int runs = 10;
    final int steps = 1024 * 1024 * 1024;

    for (int run = 0; run < runs; run++) {
        final int[] a = new int[1];
        long start = System.nanoTime();
        for (int i = 0; i < steps; i++) {
            a[0]++;
        }
        long stop = System.nanoTime();
        long time = TimeUnit.MILLISECONDS.convert(stop - start, TimeUnit.NANOSECONDS);
        System.out.printf("Time for loop# %2d: %5d ms\n", run, time);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

 Time for loop# …
Run Code Online (Sandbox Code Playgroud)

java performance jit

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

通用参数:只有菱形运算符似乎可以工作

背景:这个问题出现了这个问题(答案的第一个修订版,确切地说).此问题中提供的代码被简化为最低限度来解释问题.

假设我们有以下代码:

public class Sample<T extends Sample<T>> {

    public static Sample<? extends Sample<?>> get() {
        return new Sample<>();
    }

    public static void main(String... args) {
        Sample<? extends Sample<?>> sample = Sample.get();
    }
}
Run Code Online (Sandbox Code Playgroud)

它在没有警告的情况下编译并执行正常.然而,如果试图以某种方式定义推断类型return new Sample<>();get()明确编译器会抱怨.

到目前为止,我的印象是钻石操作符只是一些语法糖,不能写出显式类型,因此总是可以用一些显式类型替换.对于给定的示例,我无法为返回值定义任何显式类型以使代码编译.是否可以明确定义返回值的泛型类型,或者在这种情况下是否需要菱形运算符?

下面是我使用相应的编译器错误显式定义返回值的泛型类型的一些尝试.


return new Sample<Sample> 结果是:

Sample.java:6: error: type argument Sample is not within bounds of type-variable T
            return new Sample<Sample>();
                              ^
  where T is a type-variable:
    T extends Sample<T> declared in class Sample
Sample.java:6: error: …
Run Code Online (Sandbox Code Playgroud)

java generics type-inference

16
推荐指数
2
解决办法
1371
查看次数

为什么类的子类必须是静态的才能在类的构造函数中初始化子类?

所以,问题或多或少都像我写的那样.我知道它可能根本不清楚所以我会举一个例子.

我有类Tree,其中有Node类,而Tree的空构造函数是:

public class RBTree {
    private RBNode head;

    public RBTree(RBNode head,RBTree leftT,RBTree rightT){
        this.head=head;
        this.head.leftT.head.father = head;
        this.head.rightT.head.father = head;
    }

    public RBTree(RBNode head){
        this(head,new RBTree(),new RBTree());
    }

    public RBTree(){
        this(new RBNode(),null,null);
    }  

    public class RBNode{
        private int value;
        private boolean isBlack;
        private RBNode father;
        private RBTree leftT;
        private RBTree rightT;
    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse给出了错误:"由于一些中间构造函数调用,没有封闭的RBTree实例可用于"空构造函数中的"新RBTree()".但是,如果我将RBNode更改为静态类,则没有问题.

那么为什么当类是静态的时它才起作用.

顺便说一下,我找到了一个简单的解决方案:

public RBTree(){
    this.head = new RBNode();
}
Run Code Online (Sandbox Code Playgroud)

所以,我不知道第一段代码中的问题是什么.

java constructor

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

了解捕获的转换

我试图了解捕获的转换如何适用于通配符类型.JLS中有一节解释说:

让我们G使用带有相应边界的n类型参数A1,...,An来命名泛型类型声明(第8.1.2节,第9.1.2节)U1,...,Un.

存在从参数化类型G<T1,...,Tn>(第4.5节)到参数化类型的捕获转换 G<S1,...,Sn>,其中,用于1 ? i ? n:

  • 如果Ti是表单的通配符类型参数(第4.5.1节)?,那么它Si是一个新的类型变量,其上限是Ui[A1:=S1,...,An:=Sn],其下限是null类型(第4.1节).

  • 如果Ti是表单的通配符类型参数? extends Bi,那么它Si是一个新的类型变量,其上限是glb(Bi, Ui[A1:=S1,...,An:=Sn]),其下限是null类型.

    glb(V1,...,Vm)被定义为V1 & ... & Vm.

    它是一个编译时间错误,如果,对任何两个类(未接口)ViVj,Vi不是的一个子类Vj,或反之亦然.

  • 如果Ti是表单的通配符类型参数? super Bi,那么它Si是一个新的类型变量,其上限是Ui[A1:=S1,...,An:=Sn],其下限是Bi.

  • 否则,Si …

java generics

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

在switch语句中以默认情况继续

如果我有这个:

do {
    int x = scannerScan.nextInt();

    switch(x)
    {
        case 1:
            System.out.println("Stuff");
            break;
        case 2:
            System.out.println("Pink cows are fluffy and can fly.");
        default:
            continue;
    }
}
while(true);
Run Code Online (Sandbox Code Playgroud)

如果要达到默认情况会发生什么?我试图在互联网和Stackoverflow上找到东西,但是在与Java语言有关的默认情况下找不到有关继续的任何内容.

java switch-statement

8
推荐指数
3
解决办法
5428
查看次数

Mockito.any 返回 null

我正在尝试使用以下参数模拟静态方法:

Mockito.when(StaticClass.staticMethod(Mockito.any(A.class), 
                                      Mockito.any(B.class), SomeEnum.FOO))
       .thenReturn(true);
Run Code Online (Sandbox Code Playgroud)

我添加了以下注释:

@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(Parameterized.class)
@PrepareForTest({StaticClass.class, A.class, B.class})
Run Code Online (Sandbox Code Playgroud)

但是 Mockito.any 总是返回null。为什么 ?

java testing unit-testing mockito powermock

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

JBoss 6.4.20补丁允许哪些版本的Jackson?

我正在尝试更新我在6.4.20 JBoss补丁之后使用的Jackson版本.我正在使用org.codehause.jackson,com.fasterxml.jackson据我所知,JBoss 6.4.x并没有为新版本提供隐式依赖.

假设这jackson-mapper-asl-1.9.9.redhat-6是用于此补丁的有效包是否合适?当滚动到6.4.20公告的noarch部分时,我看到codehaus-jackson-mapper-asl-1.9.9-12.redhat_6提到了.这是否意味着这是推荐的版本?我可以看到它是在05/14/18发布的,并且公告是在05/15/18发布的.

目前,我遇到了以下错误作为codehause-jackson-mapper-asl与之关联fasterxml-jackson-databind,导致我相信我使用的版本不正确.

16:01:22,620 ERROR [org.jboss.resteasy.resteasy_jaxrs.i18n](http-127.0.0.1:8080-1)RESTEASY000100:执行POST/find失败:org.jboss.resteasy.spi.ReaderException:

org.codehaus.jackson.map.JsonMappingException:反序列化的非法类型:出于安全原因而被阻止

[...]

引起:org.codehaus.jackson.map.JsonMappingException:非法类型[...]反序列化:出于安全原因阻止org.codehaus.jackson.map.deser.BeanDeserializerFactory.checkLegalTypes(BeanDeserializerFactory.java:1521)[jackson -mapper-asl-1.9.9.redhat-6.jar:1.9.9.redhat-6]`

java jboss json jackson jboss6.x

7
推荐指数
2
解决办法
2826
查看次数