在这个例子中我有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);
}
);
}
答案 0 :(得分:2)
要将Optional转换为Integer,必须在转换之前调用get()方法。
Optional<String> cadena = Optional.of("333");
Integer num = Integer.valueOf(cadena.get());
答案 1 :(得分:1)
您看,Integer.valueOf
和Integer.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);