簡體   English   中英

轉換清單 <E> 列出 <T> ,其中T是抽象的

[英]Convert List<E> to List<T>, where T is abstract

我試圖概括一種我需要經常調用的方法。 它接受List<E extends RealmObject>並返回List<T extends Pojo<E>> ET的轉換通過

new T().fromRealm(realmObject)

因為T是一個抽象類,所以它不起作用,所以我無法實例化它。

public static <E extends RealmObject, T extends Pojo<E>> List<T> fromRealmList(
        RealmList<E> realmList) {
    List<T> pojoObjects = new ArrayList<>();
    if (realmList != null) {
        for (E realmObject : realmList) {
            try {
                pojoObjects.add(new T().fromRealm(realmObject));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    return pojoObjects;
}

我也嘗試使用此答案 ,但是List<T>不會接受用clazz.newInstance()創建的對象。

編輯:添加Pojo類

public abstract class Pojo<R extends RealmObject> {

@NonNull
public abstract R toRealm();

@NonNull
public abstract Pojo<R> fromRealm(R realmObject);
}

EDIT2:添加替代解決方案,該解決方案仍然無法正常工作: Required T, found Pojo<E>.

T newInstance = clazz.getConstructor()
                     .newInstance()
                     .fromRealm(realmObject);
                pojoObjects.add(newInstance);

除了作為抽象類, T還是參數類型,不能在構造函數new T()

一個典型的解決方案是使用反射:

  • fromRealmList向您的方法傳遞附加參數Class<T> clazz
  • 調用clazz.getConstructor(...).newInstance(...)

也許並不完美,但這應該可行。

--edit--以下是不使用T類型的示例:

public static <E extends RealmObject> List<Pojo<E>> fromRealmList(
    RealmList<E> realmList, Class<Pojo<E>> clazz) {

   List<Pojo<E>> pojoObjects = new ArrayList<>();
   ...
   Pojo<E> newInstance = clazz.getConstructor(...).newInstance(...).fromRealm(...);
   pojoObjects.add(newInstance);
   ...
}

列表,列表之間的區別<!--?--> , 列表<t> , 列表<e> , 和列表<object><div id="text_translate"><p> <strong>List 、 List<?> 、 List<T> 、 List<E>和List<Object>之間有什么區別?</strong></p><h1> 1.清單</h1><p> List :是原始類型,因此不是typesafe的。 它只會在轉換錯誤時產生運行時錯誤。 當轉換錯誤時,我們希望出現編譯時錯誤。 不推薦使用。</p><h1> 2.列表<?></h1><p> List<?>是一個無限通配符。 但我不確定它的用途是什么? 我可以毫無問題地打印一個List<?> :</p><pre> public static void test(List<?> list){ System.out.println(list); // Works }</pre><p> <strong>為什么我不能將項目添加到List<?> ?</strong></p><pre> public static void test(List<?> list){ list.add(new Long(2)); // Error list.add("2"); // Error System.out.println(list); }</pre><h1> 3.列表<T></h1><pre> public static void test(List<T> list){ // T cannot be resolved System.out.println(list); }</pre><p> 我不明白這種語法。 我看到了這樣的東西,它有效:</p><pre> public <T> T[] toArray(T[] a){ return a; }</pre><p> <strong>有時,我會看到<T>或<E>或<U> 、 <T,E> 。</strong> <strong>它們都是一樣的還是代表不同的東西?</strong></p><h1> 4. 列表<對象></h1><p> 這給出了錯誤“方法test(List<Object>)不適用於參數List<String> ”:</p><pre> public static void test(List<Object> list){ System.out.println(list); }</pre><p> 如果我嘗試這個然后我得到“無法從List<String>投射到List<Object> ”:</p><pre> test((List<Object>) names);</pre><p> 我很迷惑。 <strong>String是Object的子類,那么為什么List<String>不是 List List<Object>的子類?</strong></p></div></object></e></t>

[英]Difference between List, List<?>, List<T>, List<E>, and List<Object>

暫無
暫無

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

相關問題 列表,列表之間的區別<!--?--> , 列表<t> , 列表<e> , 和列表<object><div id="text_translate"><p> <strong>List 、 List<?> 、 List<T> 、 List<E>和List<Object>之間有什么區別?</strong></p><h1> 1.清單</h1><p> List :是原始類型,因此不是typesafe的。 它只會在轉換錯誤時產生運行時錯誤。 當轉換錯誤時,我們希望出現編譯時錯誤。 不推薦使用。</p><h1> 2.列表<?></h1><p> List<?>是一個無限通配符。 但我不確定它的用途是什么? 我可以毫無問題地打印一個List<?> :</p><pre> public static void test(List<?> list){ System.out.println(list); // Works }</pre><p> <strong>為什么我不能將項目添加到List<?> ?</strong></p><pre> public static void test(List<?> list){ list.add(new Long(2)); // Error list.add("2"); // Error System.out.println(list); }</pre><h1> 3.列表<T></h1><pre> public static void test(List<T> list){ // T cannot be resolved System.out.println(list); }</pre><p> 我不明白這種語法。 我看到了這樣的東西,它有效:</p><pre> public <T> T[] toArray(T[] a){ return a; }</pre><p> <strong>有時,我會看到<T>或<E>或<U> 、 <T,E> 。</strong> <strong>它們都是一樣的還是代表不同的東西?</strong></p><h1> 4. 列表<對象></h1><p> 這給出了錯誤“方法test(List<Object>)不適用於參數List<String> ”:</p><pre> public static void test(List<Object> list){ System.out.println(list); }</pre><p> 如果我嘗試這個然后我得到“無法從List<String>投射到List<Object> ”:</p><pre> test((List<Object>) names);</pre><p> 我很迷惑。 <strong>String是Object的子類,那么為什么List<String>不是 List List<Object>的子類?</strong></p></div></object></e></t> java方法轉換List<string> 列出<t>其中 T 可以是 Integer 或 Long</t></string> 在類型為T的泛型類中,如果T為List,如何查找E. <E> 泛型 <T extends List<E> &gt;適用於:每個打印 如何將Comparable []轉換為列表 <T> ? 將JSON響應轉換為List <T> 如何轉換清單 <Object> 進入清單 <T> ? Java泛型-轉換列表 <object> 列出 <T> 如何轉換單聲道 <List<T> &gt;串流 <T> ? 轉換`TransformingRandomAccessList <T> `到`清單 <T> `
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM