gpt4 book ai didi

java - 类型的通用方法

转载 作者:搜寻专家 更新时间:2023-11-01 04:07:39 25 4
gpt4 key购买 nike

我有以下界面:

public interface Caster{

public boolean tryCast(Object value);

}

及其实现:

public class IntegerCaster{

public boolean tryCast(Object value){
try{
Integer.class.cast(value);
return true;
} catch (ClassCastException e){
return false;
}
}
}
public class DateCaster{

public boolean tryCast(Object value){
try{
Date.class.cast(value);
return true;
} catch (ClassCastException e){
return false;
}
}
}

是否可以使此类实现通用化?我们不能完全接受并声明带有类型参数的 Caster,因为我们将无法按如下方式实现它:

public interface Caster<T>{

public boolean tryCast(Object value);

}

public class CasterImpl<T> implements Caster<T>{

public boolean tryCast(Object value){
try{
T.class.cast(value); //fail
return true;
} catch (ClassCastException e){
return false;
}
}
}

最佳答案

您必须在您的通用 CasterImpl注入(inject) Class 值,由 T 参数化。

像这样:

public class CasterImpl<T> implements Caster<T> {

private Clazz<T> clazz;

public CasterImpl(Class<T> clazz) {
this.clazz = clazz;
}

public boolean tryCast(Object value){
try{
clazz.cast(value);
return true;
} catch (ClassCastException e){
return false;
}
}
}

作为旁注:我不明白为什么 Caster 接口(interface)是通用的,因为您没有在接口(interface)中使用类型参数。

关于java - 类型的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com