继承情况下链式调用的异常处理

简介: 关于abstract class B<T extends B<T>> ,class A extends B<A>的用法?该用法用在链式调用中有继承关系时该如何使用

示例

单个类中链式调用非常常见,比如StringBuffer中的append方法

  StringBuffer sb = new StringBuffer();
  sb.append("精通")
  .append("java")
  .append("只需要CV")
  .append("即可");

单一类链式调用

链式调用单类写法,返回当前对象即可

class Cat {
    public Cat eat() {
        System.out.println("吃东西");
        return this;
    }
    public Cat sleep() {
        System.out.println("准备睡觉");
        return this;
    }
}

调用测试

public class Client {
    public static void main(String[] args) {
            Cat cat = new Cat();
            //链式调用
            cat.eat().sleep();
        }
    }
}
//输出结果
吃东西
准备睡觉

继承下的链式调用

继承下的链式调用将发生异常

class Animal {
    public Animal run() {
        System.out.println("奔跑");
        return this;
    }
}

class Cat extends Animal{
    public Cat eat() {
        System.out.println("吃东西");
        return this;
    }
    public Cat sleep() {
        System.out.println("准备睡觉");
        return this;
    }
}

客户端调用,出现编译错误

public static void main(String[] args) {
    Cat cat = new Cat();
    //此处.sleep出现编译错误
    //原因是调用run后返回的是父类Animal类型,此时无法调用子类扩展的sleep方法
    cat.eat().run().sleep();
}

引入泛型解决

class Animal<T extends Animal<T>> {
    public T run() {
        System.out.println("奔跑");
        return (T)this;
    }
}

class Cat extends Animal<Cat>{
    public Cat eat() {
        System.out.println("吃东西");
        return this;
    }
    public Cat sleep() {
        System.out.println("准备睡觉");
        return this;
    }
}
相关文章
|
27天前
|
设计模式 算法 中间件
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
【C++ 可调用对象的应用】C++设计模式与现代编程技巧:深入可调用对象的世界
113 1
|
6月前
|
前端开发
8 # 链式调用
8 # 链式调用
21 0
|
11月前
|
人工智能 算法 IDE
你的代码太啰嗦了 | 这么多方法调用?
本篇通过 Kotlin 独有 约定(运算符重载) 来简化方法的调用。
62 0
|
算法 Java 编译器
如何理解对象赋值给接口的操作(关键在对象!)
如何理解对象赋值给接口的操作(关键在对象!)
如何理解对象赋值给接口的操作(关键在对象!)
为什么不通过修改接口或者选择书写继承接口重写方法的新子类,偏偏选择添加上一个装饰器
为什么不通过修改接口或者选择书写继承接口的新子类,偏偏选择添加上一个装饰器?
109 0
为什么不通过修改接口或者选择书写继承接口重写方法的新子类,偏偏选择添加上一个装饰器
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
234 0
【Groovy】Groovy 方法调用 ( 使用闭包创建接口对象 | 接口中有一个函数 | 接口中有多个函数 )
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 )
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 )
113 0
【Groovy】MOP 元对象协议与元编程 ( 方法委托 | 正常方法调用 | 方法委托实现 | 代码示例 )
|
Java
Java抽象类及子类实例化顺序和方法调用顺序测试
Java抽象类及子类实例化顺序和方法调用顺序测试
257 0
|
前端开发
Promise源码解密-then的链式调用
Promise源码解密-then的链式调用
面向对象——方法的调用
面向对象——方法的调用
161 0

热门文章

最新文章