泛型方法的不同返回类型取决于调用位置

路易斯·塞普

我有以下带有泛型的方法,该方法执行接收到的列表中每个项目的getter:

public static <T, S> List<S> getValues(List<T> list, String fieldName) {
    List<S> ret = new ArrayList<S>();
    String methodName = "get" + fieldName.substring(0, 1).toUpperCase()
            + fieldName.substring(1, fieldName.length());
    try {
        if (list != null && !list.isEmpty()) {
            for (T t : list) {
                ret.add((S) t.getClass().getMethod(methodName).invoke(t));
            }
        }
    } catch (IllegalArgumentException e) {
    } catch (SecurityException e) {
    } catch (IllegalAccessException e) {
    } catch (InvocationTargetException e) {
    } catch (NoSuchMethodException e) {
    }
    return ret;
}

如果我这样称呼它,它工作得很好:

List<Integer> ids = getValues(List<MyDTO>, "id");
request.setListIds(ids);

但是,如果我在一行中执行此操作,则会给我一个编译错误:

request.setListIds(getValues(List<MyDTO>, "id"));

错误提示:

MyDTO类型的方法setListIds(List-Integer-)不适用于参数(List-Object-)

因此,当我尝试直接设置列表时,它将泛型转换为Object而不是Integer。这是为什么?

马克·托波尼克(Marko Topolnik)

这是由于Java的类型推断能力很弱。当您直接分配给变量时,它可以推断出类型,但不会根据目标参数类型来推断,这在第二个示例中需要。

你可以克服这个 this.<Integer>getValues...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java接口泛型,返回类型取决于参数泛型

来自分类Dev

与泛型有关的类型错误,具体取决于函数的位置

来自分类Dev

泛型理解返回类型取决于输入参数的函数吗?

来自分类Dev

返回泛型类型的泛型方法

来自分类Dev

C#-返回具体类型的泛型方法调用方法?

来自分类Dev

如何继承具有不同泛型返回类型的方法

来自分类Dev

用于返回类的不同泛型类型的实例的单个方法

来自分类Dev

泛型-返回不同类型的对象

来自分类Dev

Java泛型-从泛型类型的方法调用特定方法

来自分类Dev

返回类型取决于Scala中输入类型的泛型函数?

来自分类Dev

非泛型方法是否可以返回泛型类型?

来自分类Dev

如何创建泛型方法以返回泛型类型

来自分类Dev

如何从泛型类型调用重载方法

来自分类Dev

按类型调用泛型方法

来自分类Dev

从泛型类型调用静态方法

来自分类Dev

从泛型类型调用静态方法

来自分类Dev

使用嵌套泛型类型调用方法

来自分类Dev

泛型作为方法返回类型

来自分类Dev

方法对象与泛型的返回类型?

来自分类Dev

Java泛型:覆盖方法,其参数化返回类型不同

来自分类Dev

宏返回类型取决于参数

来自分类Dev

Typescript返回类型取决于对象参数

来自分类Dev

从doInBackground对不同返回类型使用泛型的异步任务

来自分类Dev

具有不同签名的C ++调用函数,具体取决于类型

来自分类Dev

VHDL-取决于泛型的条件属性声明

来自分类Dev

使用泛型类型作为异步方法的返回类型

来自分类Dev

根据泛型方法中的类型调用方法

来自分类Dev

调用具有多个泛型类型的泛型方法,而无需指定每个泛型类型

来自分类Dev

R:值取决于调用方法

Related 相关文章

热门标签

归档