Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 将字符串转换为泛型类型_Java_String_Generics - Fatal编程技术网

Java 将字符串转换为泛型类型

Java 将字符串转换为泛型类型,java,string,generics,Java,String,Generics,我的程序必须接收来自文件的输入,输入可以是字符、整数或字符。有了这个,我必须用文件中给定的元素创建一个树。输入的类型在文件的开头给出。我的问题是,我的insertNode函数接收的元素是泛型类型T,但文件是作为字符串读取的。如何将字符串转换为T类型 正在尝试使用以下工具进行编译: String element = br.readLine(); T elem = (T)element; 导致编译错误: “找到:java.lang.String必需: T“ 您需要基于字符串创建T的实例(或者

我的程序必须接收来自文件的输入,输入可以是字符、整数或字符。有了这个,我必须用文件中给定的元素创建一个树。输入的类型在文件的开头给出。我的问题是,我的insertNode函数接收的元素是泛型类型T,但文件是作为字符串读取的。如何将字符串转换为T类型

正在尝试使用以下工具进行编译:

String element = br.readLine();  
T elem = (T)element; 
导致编译错误:

“找到:java.lang.String必需: T“


您需要基于
字符串创建
T
的实例(或者等效地,将
字符串
转换为
T

在这种情况下,角色扮演并不像你想象的那样。cast所做的只是告诉类型系统,“我知道你对这个对象是什么类有不同的、不太具体的想法,但我告诉你它是一个
Foo
。继续,检查它的运行时类,看看我是对的!”。但是,在这种情况下,字符串不一定是
T
,这就是强制转换失败的原因施法不会转换,它只是消除歧义

特别是,在这种情况下,如果
T
恰好是
Integer
,则需要通过调用
Integer.parseInt(element)
将字符串转换为整数。但是,您复制的代码部分不知道调用时它将是什么,并且无法自行执行这些转换。因此,您需要传入一些参数化的辅助对象来执行转换,如下所示:

interface Transformer<I, O> {
    O transform(I input);
}

...

public void yourMethod(BufferedReader br, Transformer<String, T> transformer) {

    String element = br.readLine();
    T elem = transformer.transform(element);

    // Do what you want with your new T
}
接口转换器{
O变换(I输入);
}
...
公共方法(BufferedReader br、Transformer-Transformer){
String元素=br.readLine();
T elem=变压器变换(元素);
//用你的新T做你想做的
}

请向我们展示如何调用
insertNode
方法。在哪里定义了
T
T本身不是一种类型……您如何在这里实现您的转换方法?