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