java - 是否可以为方法分配不同的返回类型

标签 java generics

我的想法是有一个 validator 接口(interface),它有方法getRealValue()。返回值取决于字段,可以是StringIntegerLong 值。

我的机会是:

  1. 我可以将返回类型指定为 Object 并在每次调用此方法后都使用转换。 (RuntimeError 如果发生错误转换)。

  2. 在实例化 validator 时,我可以使用通用的传递返回类型(我仍然必须使用转换,但在方法 getRealValue 内,并且只能使用一次)。如果我忘记传递返回类型或传递错误的类型,仍然是 RuntimeError

是否有一种方法可以将返回类型存储在 validator 中并使用它?

最佳答案

对于您的第一点,如果转换不当,则无法在运行时获取 ClassCastException

在你的第二种情况下你不需要转换,看这里的例子:

public interface Foo<T> {
    public T getValue(); 
}

...然后在其他地方:

public class Blah<T> implements Foo<T> {
    @Override
    public T getValue() {
        // TODO write the code
        // note that because of type erasure you won't know what type T is here
        return null;
    }
}

...然后,在其他地方:

Blah blah1 = new Blah<String>();
String s = blah1.getValue();
Blah blah2 = new Blah<Long>();
// etc.

最后,这里有一些文学给你:

关于java - 是否可以为方法分配不同的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19442475/

相关文章:

java - 返回类型之前的通用方法java 6 <T>

c# - 如何将对象的类型与泛型类型进行比较,与泛型参数无关?

C# 模板和特殊构造函数

java - 如何检查泛型方法参数以避免 ClassCastException?

java - 如何使用 Thread.sleep 显示简单的掉落动画?

java - 设置日期格式,然后将其转换为 Date from String- Java

Java FileInputStream 使用 if

java - 在 Spliterator .tryAdvance() 的实现中使 action .accept() 超过一个元素是否有任何危险?

具有特定类型的 List 上的 C# 扩展方法

c# - 如果在运行时类型未知,您可以在 C# 中使用泛型方法吗?