Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转换可选项时出错<;字符串>;从TextInputDialog转换为整数_Java_Type Conversion - Fatal编程技术网

Java 转换可选项时出错<;字符串>;从TextInputDialog转换为整数

Java 转换可选项时出错<;字符串>;从TextInputDialog转换为整数,java,type-conversion,Java,Type Conversion,在这个例子中,我有tempSocket1和tempSocket2,但我真的只想要其中一个。我只是将这两种方法都包括进来,以表明我尝试了这两种方法,但我不断得到一个错误,“Integer类型中的方法valueOf(String)不适用于参数(可选)。”我认为这两种方法都是用于将字符串数据类型转换为Integer的方法,但我不确定可选部分如何改变整个系统 private void showTextInputDialog() { TextInputDialog changePort =

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

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语言规则。哦,哇,我真的不知道选修课是它自己的课。我确实让它像你说的那样工作,首先得到字符串结果,然后将新字符串解析为整数,谢谢。