从非泛型基类转换为泛型子类

时间:2020-07-01 05:26:50

标签: java generics

我有非通用的父类。

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

1 个答案:

答案 0 :(得分:0)

您可以只使用?占位符。显然,您将无法使用需要了解特定类型的新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!
        }
    }
}