首页 > 解决方案 > 当我们在泛型类中需要多一个参数时,菱形运算符会做什么?

问题描述

class GenericBase<T> {
    private T baseVariable;
    
    public T get() {
        return baseVariable;
    }
    
    public void set(T t){
        baseVariable = t;
    }
}
class GenericSubTwo<T, V> extends GenericBase<T>{

    private V subVariable2;
    
    public V get2(){
        return subVariable2;
    }
}


public TestClass{

public static void main(String[] args){
GenericBase<Integer> sub2 = new GenericSubTwo<>();
}
}

在这种情况下,菱形运算符是否真的使 new GenericSubTwo<Integer, Integer>(); 或者别的什么..我不明白发生了什么,因为在 GenericSubTwo 我需要两个参数..

标签: javagenerics

解决方案


这真的没关系,因为V无论如何你都看不到是什么。

V推断为Object,因为那是对 的约束V

更新

实际上,它似乎V被推断为?,因为它可以转换为任何东西。

GenericBase<Integer> sub2 = new GenericSubTwo<>();

// Valid cast: T must be Integer, but V can be anything
GenericSubTwo<Integer, String> x = (GenericSubTwo<Integer, String>) sub2;

推荐阅读