簡體   English   中英

從非通用基礎 class 轉換為通用子 class

[英]Casting from Non-generic base class to Generic Sub class

我有非通用父 class。

public class FilterCondition {

    private String key;

    private String value;

    private String  condition;
}

我有一個通用的子類。

public class FilterJoinCondition<P,S> extends FilterCondition {
    public FilterJoinCondition(String key, String value, String condition) {
        super(key, value, condition);
    }

    private Class primaryEntity;

    private Class secondaryEntity;

    private String mappedBy;
}

我將所有FilterCondition存儲在List中並傳遞給我需要將類型傳遞給FilterJoinCondition的方法

if (condition instanceof FilterJoinCondition) {
     FilterJoinCondition<P,S>  joinCondition = (FilterJoinCondition) condition;
}

我知道這是不正確的(上面的代碼)。

在不知道類型 (P,S) 的情況下如何FilterCondition

你可以只使用? 占位符。 顯然,您將無法使用新的joinCondition ,這需要了解特定類型。 但是你可以做的所有一般的事情都很好。

public class FilterJoinCondition<P,S> extends FilterCondition {

    private Class primaryEntity;

    private Class secondaryEntity;

    private String mappedBy;
    
    public FilterJoinCondition(String key, String value, String condition) {
        super(key, value, condition);
    }
    
    public void doStuff(P param) {
        System.out.println(param.getClass());
    }
    
    public static void main(String[] args) {
        FilterCondition condition = new FilterJoinCondition<>("foo", "bar", "baz");
        
        if (condition instanceof FilterJoinCondition) {
             FilterJoinCondition<?,?>  joinCondition = (FilterJoinCondition) condition;
             joinCondition.doStuff(new String()); //illegal, you do not know P!
        }
    }
}

暫無
暫無

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

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