从TextInputDialog将Optional <string>转换为Integer时出错

时间:2016-04-04 01:38:38

标签: java type-conversion

在这个例子中我有tempSocket1和tempSocket2,但我真的只想要其中一个。我只是包括两个显示我尝试了两种方法,但我不断收到错误,“Integer类型中的方法valueOf(String)不适用于参数(可选)。”我认为这两种方法都是用于将字符串数据类型转换为整数的方法,但我不确定Optional部分如何更改整个系统。

private void showTextInputDialog() {
        TextInputDialog changePort = new TextInputDialog("Settings");
        changePort.setHeaderText("Change Port");
        changePort.setContentText("Please enter port number to be used for establishing connection...");

        Optional<String> result = changePort.showAndWait();
        result.ifPresent(e -> {
            Integer tempSocket1 = Integer.valueOf(result);
            Integer tempSocket2 = Integer.parseInt(result);
            }
        );
}

4 个答案:

答案 0 :(得分:2)

要将Optional转换为Integer,必须在转换之前调用get()方法。

Optional<String> cadena = Optional.of("333");
Integer num = Integer.valueOf(cadena.get());

答案 1 :(得分:1)

您看,Integer.valueOfInteger.parseInt方法需要类型为String的参数,但您传递的是Optional<String>。这就是错误发生的原因。 可选字符串和字符串不相同。

考虑一下,如果Optional<String> String相同,ArrayList<String>是否与String相同? LinkedList<String>是否与String相同?那么HashMap<String, Integer>呢?它既是String 又是 Integer

处理泛型类型与其泛型类型参数相同的混乱会带来破坏性!想象一下,在可选字符串上调用charAt!没有实施,没有人知道会发生什么......

所以是的,从不认为泛型类型与泛型类型参数的类型相同。

答案 2 :(得分:0)

您尝试传递的是Optional<String>而不是正常的String。在将结果转换为整数之前,您需要先使用.get()获取字符串。

Optional<String> result = changePort.showAndWait();
result.ifPresent(e -> {
    Integer tempSocket1 = Integer.valueOf(result.get());
    Integer tempSocket2 = Integer.parseInt(result.get());
    }
);

答案 3 :(得分:0)

只是为了扩展其他答案,使用map方法可能看起来更好,而使用lambda和方法引用则更多:

Optional<String> result = changePort.showAndWait();
Integer tempSocket = result.map(Integer::valueOf).orElse(8080);