加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 类型的通用方法

发布时间:2020-12-15 05:12:54 所属栏目:Java 来源:网络整理
导读:我有以下界面: 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
我有以下界面:

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;
        }
   }
}

解决方法

您必须在Generic CasterImpl中注入由T参数化的Class值.

像这样的东西:

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接口为Generic的原因,因为您没有在接口中使用type-parameter.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读