Java - 强制继承 N 个重写的抽象方法中的 1 个
Java - Force Inheritance of 1 of N Overridden Abstract Methods
使用 Java 6,我有一种情况,我想强制 child class 实现 N 个重写方法中的 1 个。让我用一个例子来解释:
public abstract class TestClass {
public abstract String isValidInput(ObjectOne objectOne);
public abstract String isValidInput(ObjectOne objectOne, ObjectTwo objectTwo);
public abstract String isValidInput(ObjectOne objectOne, ObjectTwo objectTwo, ObjectThree objectThree);
//Lots of other Code
}
我面临的问题是我不知道我需要验证多少 objects 或 objects 的类型。但是,我确实知道可能性有限。 (我在上面的例子中使用了 3,但实际上它可能是 5。)我想做的是强制我的 child class 只实现 one isValidInput(...)
方法视情况而定。
解决这个问题最干净的方法是什么?
非常感谢您的宝贵时间!
I do not know exactly how many objects or types of objects
然后让所有你想测试的对象,不管是什么类型,都实现相同的接口。例如:
public interface Testable {
public boolean isValid();
}
然后你可以只传递一个可测试对象列表:
public abstract class TestClass {
public abstract String isValidInput(List<Testable> list);
}
java 中唯一存在的选项是省略号 (...),表示相同类型的可变数量的参数。
例如:
public void doSomething(Object... arguments){
// something
}
arguments 在这种情况下是一个简单的数组。其他选项可能正在重新考虑架构。我认为这是最好的选择。
为什么不将上面的答案组合起来并添加泛型?
public interface Validator<T> {
boolean validate(T... objects);
}
public class StringValidator implements Validator<String> {
@Override
public boolean validate(String... objects) {
return false;
}
}
使用 Java 6,我有一种情况,我想强制 child class 实现 N 个重写方法中的 1 个。让我用一个例子来解释:
public abstract class TestClass {
public abstract String isValidInput(ObjectOne objectOne);
public abstract String isValidInput(ObjectOne objectOne, ObjectTwo objectTwo);
public abstract String isValidInput(ObjectOne objectOne, ObjectTwo objectTwo, ObjectThree objectThree);
//Lots of other Code
}
我面临的问题是我不知道我需要验证多少 objects 或 objects 的类型。但是,我确实知道可能性有限。 (我在上面的例子中使用了 3,但实际上它可能是 5。)我想做的是强制我的 child class 只实现 one isValidInput(...)
方法视情况而定。
解决这个问题最干净的方法是什么?
非常感谢您的宝贵时间!
I do not know exactly how many objects or types of objects
然后让所有你想测试的对象,不管是什么类型,都实现相同的接口。例如:
public interface Testable {
public boolean isValid();
}
然后你可以只传递一个可测试对象列表:
public abstract class TestClass {
public abstract String isValidInput(List<Testable> list);
}
java 中唯一存在的选项是省略号 (...),表示相同类型的可变数量的参数。
例如:
public void doSomething(Object... arguments){
// something
}
arguments 在这种情况下是一个简单的数组。其他选项可能正在重新考虑架构。我认为这是最好的选择。
为什么不将上面的答案组合起来并添加泛型?
public interface Validator<T> {
boolean validate(T... objects);
}
public class StringValidator implements Validator<String> {
@Override
public boolean validate(String... objects) {
return false;
}
}