java:传递一个对象并返回相同对象的类型

标签 java design-patterns reflection abstract-class

我有一个抽象类A

public astract class A{
   public abstract A f(A a) throws IllegalArgumentException;
};

但我希望传递给 f 的对象 a 具有与对象本身相同的类型,并返回相同类型的对象,否则抛出 IllegalArgumentException。我如何为所有子类一次性实现这一点? A级有办法做到这一点吗?

最佳答案

Java 没有提供以声明方式声明此要求的方法。但是,您可以按照 Template Method 在抽象类级别进行运行时检查。设计模式:

public abstract class A {
    public final A f(A a) {
        if (a.getClass() != this.getClass()) {
            throw new IllegalArgumentException();
        }
        A res = fImpl(a);
        if (res.getClass() != this.getClass()) {
            throw new InvalidOperationException();
        }
        return res;
    }
    protected abstract A fImpl(A a); // Implementing classes put functionality here
}

以上代码修改f(A)通过为 A 的所有子类提供共享功能,从抽象方法到模板方法 。在本例中,共享功能是参数检查以及返回类型检查。

这是您的类的客户端将要使用的方法。另一方面,抽象类的实现者将实现 fImpl方法,可以假设其参数 A是与其自己的类相匹配的子类。

关于java:传递一个对象并返回相同对象的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34704861/

相关文章:

java - Java 8 中使用的功能接口(interface)是什么?

java - 字段注入(inject)如何破坏不变性

c# - "interface based programming"到底是什么?

Java - 对于这种情况,正确的设计/设计模式是什么?

c++ - 如何根据 DLL 端的请求卸载 DLL 模块?

java - 如何调用传递的方法?这就是委托(delegate)吧?

java - 无法从 Object 转换为 char

java - 在 JSF 2.0 中检索其他组件的客户端 ID

c# - 如何遍历类的属性?

java - 如何获取 .kt 文件中所有类的列表