繁体   English   中英

Java:具有许多返回类型的一个函数……泛型是否可能?

[英]Java: One function with many return types… Is it possible with generics?

为了简单起见,我有一些过程如下所示:

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

我想要类似的东西

public <X is a String or a DateTime> X fetchValue(String key);  // pseudo-code

我可以这样称呼(不强制转换;类型由传递的参数隐含):

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

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

可以,但是只有在传递的参数隐含数据类型的情况下,它才有效。

我可以声明以下内容,但不会出错:

public static <T> T parseString(String s) {
    return (T) new Date();
}

public static void test() {
    Date dt = parseString("date");
}

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

您的问题在某种程度上还是模棱两可的,究竟这是您想要的那种东西,还是您真正想要的是让接收者的类型确定调用的方法还是方法内部的行为。 这是不可能的。 进入方法后,只需使用字符串即可。

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

public <X> X fetchValue(Class<X> type, String key);

如果您知道该值无论如何都将是正确的类型,则不必传递Class <X>,而您只需在实现中将其强制转换为(X)。 但是,您会收到编译器警告。 通过传递Class <X>,您可以安全地进行type.cast(value)的操作,更重要的是,尝试将其转换为正确的类型(如果尚未转换为正确的类型)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM