gpt4 book ai didi

java - java中if比较的长列表

转载 作者:搜寻专家 更新时间:2023-11-01 01:52:45 26 4
gpt4 key购买 nike

我需要比较两个对象。如果存在差异,我需要根据特定差异记录它并返回 true。

例如:

private boolean compTwoObjects(Object objA, Object ObjB) {
if(objA.getType() != objB.getType()) {
logTheDifference("getType is differing");
return true;
}
.
.
.
// Now this could invoke other composite methods
if(checkFont(objA.getFont(), objB.getFont()) {
logTheDifference("Font is differing");
return true;
}
}


private boolean checkFont(Font fontObjA, Font fontObjB) {
if(fontObjA.getBold() != fontObjB.getBold()) {
logTheDifference("font bold formatting differs");
return true;
}
.
.
.
if(fontObjA.getAllCaps() != fontObjB.getAllCaps()) {
logTheDifference("font all caps formatting differs");
return true;
}
.
.
.
if(checkBorderDiff(fontObjA.getBorder(), fontObjB.getBorder())) {
logTheDifference("border diff");
return true;
}
}

private boolean checkBorderDiff(Border borderObjA, Border borderObjB) {
if (borderObjA.getColor() != null || borderObjB.getColor() != null) {
if (!borderObjA.getColor().equals(borderObjB.getColor())) {
logIt("border color differing");
return true;
}
}

if (borderObjA.getDistanceFromText() != borderObjB.getDistanceFromText()) {
logIt("distance of the border from text or from the page edge in points differing");
return true;
}

if (borderObjA.isVisible() != borderObjB.isVisible()) {
logIt("border visibility differing");
return true;
}

if (borderObjA.getLineStyle() != borderObjB.getLineStyle()) {
logIt("line style differing for border");
return true;
}

if (borderObjA.getLineWidth() != borderObjB.getLineWidth()) {
logIt("border width in points differing");
return true;
}

if (borderObjA.getShadow() != borderObjB.getShadow()) {
logIt("border shadow differing");
return true;
}
}

//And it is going like this.

我的问题是我想避免在方法中使用多个 if 语句。我还想记录与特定差异对应的消息。

我在 stackoverflow 上读到过一些类似的问题,这些问题是通过命令模式或 HashMap 解决的。但它们不包括比较。

我想重构我的代码以摆脱一系列的 if。

最佳答案

有一个由泛型支持的比较器系统。每个比较器也会知道下一行是什么。例如:

interface IComparer<T> {
boolean areDifferent (T first, T second);
}

class FontComparer implements IComparer<Font> {
@Override
public boolean areDifferent(Font first, Font second) {
// Compare fonts start
// ..
// Compare fonts end
return new BorderComparer().areDifferent(first.getBorder(), second.getBorder());
}
}


class BorderComparer implements IComparer<Border> {

@Override
public boolean areDifferent(Border first, Border second) {
//Do border comparison alone
return false;
}
}

您现在可以设置一个比较器链,并在比较失败时退出。否则,比较转到链中的下一个比较器。

客户端代码最终将如下所示:

    Object one = new Object();
Object two = new Object();
new ObjectComparer().areDifferent(one, two);

关于java - java中if比较的长列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20782815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com