繁体   English   中英

如何在Map.Entry中使用通用方法参数?

[英]How to use generic method parameters in Map.Entry?

我想创建一个采用Map.Entry的通用List的方法。 键应始终为String类型,其值可以为任何值。

然后,我想提供以下条目:

public void test() {
    List<Map.Entry<String, String>> strings;
    apply(strings);

    List<Map.Entry<String, Integer>> integers;
    apply(integers);
}

private void apply(List<Map.Entry<String, ?>> entry) {
}

private void apply(List<Map.Entry<String, Object>> entry) {
}

但是:这两个apply()方法都不在这里起作用。 旁注:我无法更改条目的类型。 表示<String, String><String, Integer>必须保持原样。

如何将它们纳入通用Apply方法?

使apply方法通用:

private <T> void apply(List<Map.Entry<String, T>> entry) {
}

请注意,根据您希望在apply正文中执行的操作,使用private void apply(List<? extends Map.Entry<String, ?>> entry)签名可能不够。

例如,如果您希望将列表中一个条目的值更改为另一条目的值。

以下内容不会通过编译:

private void apply(List<? extends Map.Entry<String, ?>> entry) {
    entry.get(1).setValue (entry.get(0).getValue());
}

但这将:

private <T> void apply(List<Map.Entry<String,T>> entry) {
    entry.get(1).setValue (entry.get(0).getValue());
}

OP对问题进行编辑后,使其成为List<Map.Entry<String, Integer>>而不是Map.Entry<String, Integer> ...

将多余的绑定添加到参数类型中:

private void apply(List<? extends Map.Entry<String, ?>> entry) {
                    //  ^-------^ here

这是必需的,因此编译器可以阻止您将Map.Entry<String, Integer>放入List<Map.Entry<String, String>> ,这会破坏类型安全性。

暂无
暂无

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

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