博客
关于我
java重载时泛型遇见Object类型时报错both methods have same erasu
阅读量:723 次
发布时间:2019-03-21

本文共 1541 字,大约阅读时间需要 5 分钟。

为了解决泛型类的重载方法与 Object 类型方法冲突的问题,以下是详细的解决方案和步骤:

问题背景当在一个泛型类中定义多个重载方法,包括接收 Object 类型的参数时,可能会遇到编译器无法区分不同类型的重载方法,导致错误。

解决方法

  • 保留所有重载方法,但确保它们独立不冲突

    • 定义一个 setA(T a) 方法。
    • 定义一个 setA(float a) 方法。
    • 定义一个接收 Object 类型的 setA(Object a) 方法。
  • 使用擦除界限以区分不同类型

    • 定义一个类 Number作为泛型Ts的上限。
    • 在目标类中使用 extends Number 以确保存在与其他类型区分开来。
  • 具体实现

    // 定义一个扩展Number的泛型public class Number {}public class main1
    { public T a; public void setA(T a) { System.out.println("Tset"); } public void setA(float a) { System.out.println("Fset"); } public void setA(Object a) { System.out.println("Oset"); }}

    测试代码

    public class main2 {    public static void main(String[] args) {        main1
    main1 = new main1<>(); main1.setA(1); // 调用T类型的方法,输出Tset main1.setA(1.0f); // 调用float类型的方法,输出Fset main1.setA(new Object()); // 调用Object类型的方法,输出Oset main1.save(); } public static void main(String[] args) throws NoSuchFieldException { main1
    main1 = new main1<>(); try { main1.setA((Number) 123); main1.save(); } catch (ClassCastException e) { System.out.println("错误:非Number类型不能被赋值"); } }}

    效果解释

  • 保留所有方法

    • setA(T a) 用于处理 T 类型的参数。
    • setA(float a) 处理 float 类型的常见数值。
    • setA(Object a) 接收任意对象,特别用于动态类型或不确定类型的情况。
  • ** uống擦除界限**:

    • 定义 Number 作为泛型 T 的上限,确保 T 始终扩展 Number 或其子类。
    • 在调用时,确保传递的参数是正确的类型,避免类型安全问题。
  • 测试故障排除

    • 使用 save() 方法打印当前实例的类型,直观展示 a 的类型,便于调试和验证。
    • 异常处理确保只能将 Number 类型赋值给 a,避免类型错误。
  • 结论通过合理设置代码结构和使用擦除界限,可以有效管理和区分不同类型的重载方法,解决泛型与 Object 类型方法冲突问题,确保类型安全。

    转载地址:http://xogrz.baihongyu.com/

    你可能感兴趣的文章
    Netty5.x 和3.x、4.x的区别及注意事项(官方翻译)
    查看>>
    netty——bytebuf的创建、内存分配与池化、组成、扩容规则、写入读取、内存回收、零拷贝
    查看>>
    netty——Channl的常用方法、ChannelFuture、CloseFuture
    查看>>
    netty——EventLoop概念、处理普通任务定时任务、处理io事件、EventLoopGroup
    查看>>
    netty——Future和Promise的使用 线程间的通信
    查看>>
    netty——Handler和pipeline
    查看>>
    Vue输出HTML
    查看>>
    netty——黏包半包的解决方案、滑动窗口的概念
    查看>>
    Netty中Http客户端、服务端的编解码器
    查看>>
    Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
    查看>>
    Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)
    查看>>
    Netty中的组件是怎么交互的?
    查看>>
    Netty中集成Protobuf实现Java对象数据传递
    查看>>
    netty之 定长数据流处理数据粘包问题
    查看>>
    Netty事件注册机制深入解析
    查看>>
    netty代理
    查看>>
    Netty入门使用
    查看>>
    netty入门,入门代码执行流程,netty主要组件的理解
    查看>>
    Netty原理分析及实战(一)-同步阻塞模型(BIO)
    查看>>
    Netty原理分析及实战(三)-高可用服务端搭建
    查看>>