【问题标题】:Convert a String to generic type将 String 转换为泛型类型
【发布时间】:2011-03-31 11:01:21
【问题描述】:

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

尝试编译:

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

导致编译错误:

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

【问题讨论】:

  • 请告诉我们您是如何调用insertNode 方法的。
  • T 在哪里定义? T 本身不是一个类型...

标签: java string generics


【解决方案1】:

您需要有某种方法创建T 的实例,基于String(或等效地,将String 转换为T)。

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

特别是,如果在这种情况下T 恰好是Integer,您需要通过调用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
}

【讨论】:

  • 你如何在这里实现你的转换方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多