Java Generic TypeOf返回T.

时间:2012-10-03 03:04:01

标签: java

public Object Convert(Class<T> Type) {
    if (Type == Integer.class) {
        return Integer.parseInt(DataInfo);
    } else if (Type == String.class ) {
        return DataInfo;
    } else if (Type == Double.class) {
        return Double.parseDouble(DataInfo);
    }
    return null;

}

我还有其他办法吗?

我只想做点什么:int X = Foo.Convert<int>();

它需要一个字符串并将其转换为<Type>&lt; -----那。我试过了:

public T Convert()
{
}

但是我到处搜索并且Java没有typeof函数:S基本上尝试将字符串从用户转换为数据类型。

编辑..我问,因为在C ++中我通常会这样做:

template <typename T>
inline T ToNumber(const std::string &Text){std::istringstream SS(Text); T Result; return (SS >> Result ? Result : 0);}

我想知道在Java中我是否可以这样做..我正在使用它:

package test;

import java.io.*;
import java.util.Scanner;

public class Data<T> {
    private String DataInfo;

    public String ReadBuffer() throws IOException {
        BufferedReader Buffer = new BufferedReader(new InputStreamReader(System.in));
        return (DataInfo = Buffer.readLine());
    }

    public String ReadConsole() {
        Console Con = System.console();
        return (DataInfo = Con.readLine());
    }

    public String Read() {
        Scanner Reader = new Scanner(System.in);
        return (DataInfo = Reader.next());
    }

    public Object Convert(Class<T> Type) {
        if (Type == Integer.class) {
            return Integer.parseInt(DataInfo);
        } else if (Type == String.class ) {
            return DataInfo;
        } else if (Type == Double.class) {
            return Double.parseDouble(DataInfo);
        }
        return null;

    }
}

2 个答案:

答案 0 :(得分:2)

由于类型擦除,这是完全不可能的。

你可以做的最好的事情是调用者传递Class<T>

答案 1 :(得分:0)

也许您可以查看com.google.inject.TypeLiteral,因为它可以让您通过删除。它将保留原始(非泛型)类型。