java - 在使用泛型参数调用方法时,有什么方法可以避免类型转换?

标签 java generics casting

public static void main(String[] args) {

    GenericTest genericTest = new GenericTest();

    genericTest.setValue(new BigDecimal("10"),BigDecimal.class);
    genericTest.setValue(new Date(0), Date.class);

    }

    public <T> void setValue(T element, Class<T> dataType)
    {
        if(dataType == Date.class){
            checkDate((Date)element);
        }
        else if(dataType == BigDecimal.class){
            checkBigDecimal((BigDecimal)element);
        }
    }

    public void checkDate(Date localDate)
    {
        System.out.println("This is Date metho, Caller has casted T to Date");
    }

    public void checkBigDecimal(BigDecimal localBigDecimal)
    {
        System.out.println("This is BigDecimal method, Caller has casted T to BigDecimal");

    }

这里,当调用 checkDate 和 CheckBigDecimal 方法时,我分别将类型转换为 Date 和 BigDecimal。调用这些方法时是否可以避免类型转换?

最佳答案

如果您希望该方法是通用的,则需要强制转换。但是,您可以只重载 setValue 方法。像这样:

public static void main(String[] args) {

    GenericTest genericTest = new GenericTest();

    genericTest.setValue(new BigDecimal("10"));
    genericTest.setValue(new Date(0));

}

public void setValue(BigDecimal element) {
    checkBigDecimal(element);
}

public void setValue(Date element) {
    checkDate(element);
}

public void checkDate(Date localDate) {
    System.out.println("This is Date metho, Caller has casted T to Date");
}

public void checkBigDecimal(BigDecimal localBigDecimal) {
    System.out.println("This is BigDecimal method, Caller has casted T to BigDecimal");
}

关于java - 在使用泛型参数调用方法时,有什么方法可以避免类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35428368/

相关文章:

java - 更改 SonarQube.com 上的质量配置文件

java - Android原生代码迎合api之间两种不同的函数签名

java - 带计时器的可执行 jar

java - 如何摆脱通用生成器的 "Type Safety"警告?

c - 如何检查 void* 指针是否可以安全地转换为其他内容?

java - Jaxb:根元素中的 xsi 被替换为 ns2

c# - 如何将现有实体附加到通用的 Entity Framework 上下文?

generics - Star 投影集合中的特定 KClass

java - == Java中对象的运算符

python - 将 python 列表转换为 cython ptr