Java 泛型返回类型

标签 java generics

我想编写一个可以接受类型参数(或任何方法可以从中找出类型)并返回此类型的值的方法,因此我不必强制转换返回类型。

这是一个方法:

public Object doIt(Object param){
    if(param instanceof String){
        return "string";
    }else if(param instanceof Integer){
        return 1;
    }else{
        return null;
    }
}

当我调用这个方法并传入一个字符串时,即使我知道返回类型将是一个字符串,我也必须强制转换返回对象。这类似于 int 参数。

我应该如何编写这个方法来接受一个类型参数并返回这个类型?

最佳答案

如果您不想使用特定接口(interface)来处理这些内容,您可以通过这种方式使用泛型方法:

public <T> T mymethod(T type)
{
  return type;
}

请注意,通过这种方式编译器对您计划在该方法中使用的类型一无所知,因此您应该使用绑定(bind)类型,例如:

public <T extends YourType> T mymethod(T type)
{
  // now you can use YourType methods
  return type;
}

但是你应该确定你需要一个泛型方法,这意味着 doIt 的实现对于你计划使用它的所有类型都是相同的。否则,如果每个实现都不同,只是重载方法,它会正常工作,因为返回类型不用于动态绑定(bind):

public String my(String s)
{
  return s;
}

public int my(int s)
{
  return s;
}

int i = my(23);
String s = my("lol");

关于Java 泛型返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2669326/

相关文章:

java - 使用 log4j 迁移到 log4j2 以及引用的库

java - 如何按 String[index] 对 hashmap String, Collection<String []>> 进行排序

c# - 错误 : IEnumerable could Not be defined in non-generic static class

java - 如何修复Java中的 "type argument S is not within bounds of type-variable E"

c# - 使用模式匹配,我如何从 T 库调用方法

java - java编译错误: -Xlint causing problems

java - 登录 Spring security 后保留相同的 URL

java - 如何使线程崩溃或故意挂起线程?

swift - 类型转换与 swift 中的通用协议(protocol)冲突?

ios - 从使用的类型泛型之一推断泛型类型