我最近遇到了一个问题,让我一直在思考。假设我有一个具有属性 OA 和 OB 的 O 类型对象还假设我有一个 O 类型实例的集合,其中为每个实例定义了 OA 和 OB。
现在假设我需要使用 OA 或 OB 对 O 实例的集合执行一些操作(如排序),但在任何给定时间都不能同时使用。我原来的解决方案如下。
示例——仅用于演示,而非生产代码:
public class O {
int A;
int B;
}
public static class Utils {
public static void SortByA (O[] collection) {
// Sort the objects in the collection using O.A as the key. Note: this is custom sorting logic, so it is not simply a one-line call to a built-in sort method.
}
public static void SortByB (O[] collection) {
// Sort the objects in the collection using O.B as the key. Same logic as above.
}
}
我想做的是这个……
public static void SortAgnostic (O[] collection, FieldRepresentation x /* some non-bool, non-int variable representing whether to chose O.A or O.B as the sorting key */) {
// Sort by whatever "x" represents...
}
...但是创建一个新的、高度特定的类型,我必须维护它以避免重复几行代码,这对我来说似乎是不必要的。也许我对此不正确(如果该陈述错误,我相信有人会纠正我:D),但这仍然是我目前的想法。
问题:实现此方法的最佳方法是什么?我必须实现的逻辑很难分解成更小的方法,因为它已经相当优化了。问题的根源在于我需要使用对象的不同属性执行相同的操作。我想远离使用代码/标志/等。如果可能,请在方法签名中,以便解决方案尽可能稳健。
注意:在回答这个问题时,请从算法的角度来处理。我知道某些特定于语言的功能可能是合适的替代方案,但我以前遇到过这个问题,并想从相对与语言无关的角度来理解它。另外,请不要仅将响应限制为排序解决方案,因为我仅选择它作为示例。真正的问题是如何在对对象的两个不同属性执行相同操作时避免代码重复。