簡體   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