Java:一个具有许多返回类型的函数……是否可以使用generics?

我有一些程序,为简单起见,看起来如下:

public String fetchValueAsString(String key); public DateTime fetchValueAsDateTime(String key); 

我想要类似的东西

 public  X fetchValue(String key); // pseudo-code 

我可以像这样调用(没有强制转换;传递的参数隐含类型):

 String str = fetchValue("subject"); DateTime dt = fetchValue("startDate"); 

我知道我可以只有一个方法返回Object类型并只进行转换,但我想知道是否有一种方法可以只调用一个方法,并以某种方式使用generics来确定返回值。 那么,它是否可能在Java中( 它在C#中 )?

当然,但只有传递参数隐含数据类型时才会起作用。

我可以声明以下内容并且没有错误:

 public static  T parseString(String s) { return (T) new Date(); } public static void test() { Date dt = parseString("date"); } 

但是这种事情的结果是你的解析函数的内部必须能够查看字符串并确定目标类型,并且必须在其体内进行大量的转换才能正常工作。

你的问题是否有点模棱两可,这是否是你想要的东西,或者你真正想要的是让接收者的类型决定被调用的方法或方法内的行为。 这是,AFAIK不可能。 一旦你进入方法,你必须使用的就是字符串。

由于类型擦除,在Java中必须显式传递返回类型:

 public  X fetchValue(Class type, String key); 

如果您知道值将是正确的类型,无论如何,您不必传递Class ,并且您可以在实现中简单地执行转换为(X)。 但是,您将收到编译器警告。 传入Class 后,您可以安全地执行type.cast(value),更重要的是尝试将其转换为正确的类型(如果还不是该类型)。