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/