将字符串转换为通用类型

4
我的程序需要从文件中接收输入,输入可以是字符、整数或字符。我必须根据文件中给出的元素创建一棵树。输入类型在文件开头给出。我的问题是,我的insertNode函数接收泛型T类型的元素,但文件读取为字符串。如何将字符串转换为T类型?
尝试使用以下命令进行编译:
String element = br.readLine();  
T elem = (T)element; 

编译错误的结果:

"发现:需要java.lang.String,但是得到了T类型"


请展示一下您如何调用 insertNode 方法。 - adarshr
1
T 定义在哪里? T 本身不是一种类型... - Lukas Eder
1个回答

18
您需要有一种方式,可以基于一个字符串(或等效地将字符串转换为T)创建T的实例。
在这种情况下,强制转换并不会像您想象的那样起作用。所有强制转换所做的就是告诉类型系统:“我知道您对该对象的类有一个不同、不太具体的想法,但我告诉您它是Foo。继续,检查它的运行时类,并看看我是对的! ”。然而,在这种情况下,字符串未必是T,这就是为什么强制转换失败的原因。强制转换不会转换,它只是消除歧义。
特别是,如果在这种情况下T恰好是整数,则需要通过调用Integer.parseInt(element)将字符串转换为整数。然而,您复制的代码部分不知道在调用时T将会是什么,并且无法执行这些转换。因此,您需要传递一些参数化的辅助对象来为您执行转换,例如以下内容:
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
}

你在这里如何实现你的转换方法? - Raghunandan J

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接