Java 转换可选项时出错<;字符串>;从TextInputDialog转换为整数
在这个例子中,我有tempSocket1和tempSocket2,但我真的只想要其中一个。我只是将这两种方法都包括进来,以表明我尝试了这两种方法,但我不断得到一个错误,“Integer类型中的方法valueOf(String)不适用于参数(可选)。”我认为这两种方法都是用于将字符串数据类型转换为Integer的方法,但我不确定可选部分如何改变整个系统Java 转换可选项时出错<;字符串>;从TextInputDialog转换为整数,java,type-conversion,Java,Type Conversion,在这个例子中,我有tempSocket1和tempSocket2,但我真的只想要其中一个。我只是将这两种方法都包括进来,以表明我尝试了这两种方法,但我不断得到一个错误,“Integer类型中的方法valueOf(String)不适用于参数(可选)。”我认为这两种方法都是用于将字符串数据类型转换为Integer的方法,但我不确定可选部分如何改变整个系统 private void showTextInputDialog() { TextInputDialog changePort =
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);
}
);
}
private void showTextInputDialog(){
TextInputDialog changePort=新建TextInputDialog(“设置”);
changePort.setHeaderText(“更改端口”);
setContentText(“请输入用于建立连接的端口号…”);
可选结果=changePort.showAndWait();
结果。如果存在(e->{
整数tempSocket1=整数.valueOf(结果);
整数tempSocket2=Integer.parseInt(结果);
}
);
}
您可以看到,Integer.valueOf
和Integer.parseInt
方法需要类型为String
的参数,但您正在传递一个可选的。这就是错误发生的原因。可选字符串和字符串不相同
试想一下,如果Optional
与String
相同,ArrayList
是否与String
相同?LinkedList
是否与String
相同?那HashMap呢?它是一个字符串
还是一个整数
将泛型类型视为其泛型类型参数将带来的混乱是破坏性的!想象一下在可选字符串上调用charAt
!没有实施,没有人知道会发生什么
因此,是的,千万不要认为泛型类型与泛型类型参数的类型相同。您试图传递的是一个而不是一个普通的字符串。在将结果转换为整数之前,需要先使用获取字符串。或者使用result.ifPresent(e…),它将自动展开可选值并将其转换为整数
Optional<String> result = changePort.showAndWait();
result.ifPresent(e -> {
Integer tempSocket1 = Integer.valueOf(e);
Integer tempSocket2 = Integer.parseInt(e);
}
);
Optional result=changePort.showAndWait();
结果。如果存在(e->{
整数tempSocket1=整数.valueOf(e);
整数tempSocket2=Integer.parseInt(e);
}
);
为了扩展其他答案,使用map
方法可能会更好,使用lambda和方法参考可能会更好:
Optional<String> result = changePort.showAndWait();
Integer tempSocket = result.map(Integer::valueOf).orElse(8080);
Optional result=changePort.showAndWait();
Integer tempSocket=result.map(Integer::valueOf).orElse(8080);
要将可选值转换为整数,必须在转换之前调用get()方法
Optional<String> cadena = Optional.of("333");
Integer num = Integer.valueOf(cadena.get());
Optional cadena=Optional.of(“333”);
Integer num=Integer.valueOf(cadena.get());
如果您有一个可选
,并且需要字符串
,则必须使用get()
来获取该字符串。Java不会自动做到这一点。请注意,Optional
是一个与其他类一样的类,它有自己的方法。关于Optional
,没有任何特殊的Java语言规则。哦,哇,我真的不知道选修课是它自己的课。我确实让它像你说的那样工作,首先得到字符串结果,然后将新字符串解析为整数,谢谢。