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

java – 使用泛型,我如何定义一个允许传入任何对象并且不提供警

发布时间:2020-12-15 05:00:59 所属栏目:Java 来源:网络整理
导读:我有一个这样定义的接口: public interface AdditionalProcessingPre,Post { public void postProcess(Pre pre,Post post);} 而且我已经决定要创建一个扩展它的NoAdditionalProcessing类.这是一个无操作,它不会为它的实现做任何事情.这是我编译的实现: pub
我有一个这样定义的接口:

public interface AdditionalProcessing<Pre,Post> {
    public void postProcess(Pre pre,Post post);
}

而且我已经决定要创建一个扩展它的NoAdditionalProcessing类.这是一个无操作,它不会为它的实现做任何事情.这是我编译的实现:

public class NoAdditionalProcessing implements AdditionalProcessing {

    @Override
    public void postProcess(Object o,Object o2) {

    }
}

问题是,当我将其传递给这样的方法签名时:

public <I,O> O map(I source,Class<O> destinationClass,AdditionalProcessing<I,O> additionalProcessing) throws MappingException

它给我一个警告方法调用说:

Unchecked assignment: …NoAdditionalProcessing to …AdditionalProcessing

那些……是我排除的包装名称.有没有办法摆脱这个警告?我基本上想要定义NoAdditionalProcessing,所以它说,“我会接受任何东西,它是无关紧要的,这没关系”.

我试过这个:

public class NoAdditionalProcessing implements AdditionalProcessing<Object,Object>

但这给了我一个错误,因为它要求我传入Object.我试过了

public class NoAdditionalProcessing implements AdditionalProcessing<? extends Object,? extends Object>

但那不编译.

解决方法

更改类声明以为类型参数赋值:

public class NoAdditionalProcessing 
    implements AdditionalProcessing<Object,Object>

然后,将方法签名更改为具有超级通配符,以便可以为任何目标类传递NoAdditionalProcessing:

public <I,AdditionalProcessing<? super I,? super O> additionalProcessing)

(编辑:李大同)

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

    推荐文章
      热点阅读