簡體   English   中英

在Java中將參數傳遞給具有泛型的方法

[英]passing arguments to method with generics in java

我有以下類和方法的結構:

public class NavigationTree<T extends BaseListItem<? extends BaseData>> {
    public boolean insert(final T parent, final T child){
    }
}

public class Screen extends BaseData {
}

public class DrawerListItem<T> extends BaseListItem<T>{
}

這是我從其他班級之一打電話來的內容:

mCurItems.insert(new DrawerListItem<Screen>(null, null),
                 new DrawerListItem<Screen>(screen.name, screen));

編譯器將引發以下錯誤:

錯誤:類型不兼容:DrawerListItem無法轉換為CAP#1,其中CAP#1是一個新的類型變量:CAP#1從捕獲到的擴展BaseListItem? 擴展BaseListItem

我不明白為什么這應該是錯誤的。 DrawerListItem extends BaseListItemScreen extends BaseData 我嘗試閱讀其他有關泛型類型和類型參數的文章,但似乎都沒有解決這個問題。

嘗試這個:

public class Test {
    public static void main(String[] args) throws java.lang.Exception {
        NavigationTree<DrawerListItem<Screen>> nt = new NavigationTree<>();
        nt.insert(new DrawerListItem<Screen>(), new DrawerListItem<Screen>());
    }

    private static class NavigationTree<T extends BaseListItem<? extends BaseData>> {
        public boolean insert(final T parent, final T child) {
            return true;
        }
    }

    private static class DrawerListItem<T> extends BaseListItem<T> {}
    private static class BaseListItem<T> {}
    private static class Screen extends BaseData {}
    private static class BaseData {}
}

我想出了解決方案。 在我的DrawerListItem聲明中,我已將其聲明為

public class DrawerListItem<T> extends BaseListItem<T>{
}

而NavigationTree期望:

<T extends BaseListItem<? extends BaseData>>

實質上意味着:

<DrawerListItem<? extends BaseData>>

在這種情況下。

因此,該錯誤基本上是說聲明的模板類型與所需的模板類型不同,因此是錯誤。 希望這對其他人有幫助。 謝謝大家的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM