相关疑难解决方法(0)

Java泛型返回类型

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

这是一个方法:

public Object doIt(Object param){
    if(param instanceof String){
        return "string";
    }else if(param instanceof Integer){
        return 1;
    }else{
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我调用这个方法,并传入一个String时,即使我知道返回类型将是一个String我必须强制转换返回Object.这类似于int param.

如何编写此方法来接受类型参数,并返回此类型?

java generics

39
推荐指数
3
解决办法
8万
查看次数

Java泛型函数:如何返回泛型类型

这是一个Java通用模式:

public <T> T getResultData(Class<T> resultClass, other_args) { 
   ...
   return resultClass.cast(T-thing);
}
Run Code Online (Sandbox Code Playgroud)

典型的通话看起来像:

   DoubleBuffer buffer;
   buffer = thing.getResultData(DoubleBuffer.class, args);
Run Code Online (Sandbox Code Playgroud)

当期望的返回类型本身是通用的时候,我从来没有弄清楚如何干净地使用这个模式.要"具体",如果这样的函数想要返回Map<String,String>怎么办?因为你不能获得泛型的类对象,当然,唯一的选择是传递Map.class,然后你需要一个强制转换和一个@SuppressWarning毕竟.

一个人最终会打电话:

Map<String, String> returnedMap;
returnedMap = thing.getResultData(Map.class, some_other_args);
Run Code Online (Sandbox Code Playgroud)

现在回到需要强制转换并抑制警告.

我想人们可以从java.lang.reflect.Type家里取出一些东西而不是它Class,但那些并不是特别容易编造的.看起来像:

class Dummy {
 Map<String, String> field;
}

...

Type typeObject = Dummy.class.getField("field").getGenericType();
Run Code Online (Sandbox Code Playgroud)

鉴于此,被调用函数可以提取基类型并将其用于转换或newInstance,但虚拟字段业务肯定看起来很难看.

请注意,这样的函数并不总是调用newInstance.显然,如果他们这样做,他们就不需要打电话了resultClass.cast.

java generics

13
推荐指数
1
解决办法
3万
查看次数

标签 统计

generics ×2

java ×2