我有一个抽象类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/