IntelliJ报告了代码重复警告,即使我认为它不是真正的重复。我在谷歌上找不到任何关于它的东西,所以我想知道我做错了什么。
例如:
private static float[] getMatrix() {
switch (matrixMode) {
case PROJECTION:
return projectionMatrix;
case VIEW:
return viewMatrix;
case MODEL:
return modelMatrix;
default:
throw new Error("Unknown matrix mode " + matrixMode);
}
}
private static Stack<float[]> getStack() {
switch (matrixMode) {
case PROJECTION:
return projectionStack;
case VIEW:
return viewStack;
case MODEL:
return modelStack;
default:
throw new Error("Unknown matrix mode " + matrixMode);
}
}
这是一个代码重复报告,我不明白为什么。 嗯,它确实看起来很相似,但绝不是重复。
用法也大不相同。 我用它去除每个方法中的实际代码重复,它使用基于矩阵模式的矩阵,例如:
public static void push() {
switch (matrixMode) {
case PROJECTION:
projectionStack.push(projectionMatrix.clone());
break;
case VIEW:
viewStack.push(viewMatrix.clone());
break;
case MODEL:
modelStack.push(modelMatrix.clone());
break;
}
}
public static void pop() {
switch (matrixMode) {
case PROJECTION:
projectionMatrix = projectionStack.pop();
break;
case VIEW:
viewMatrix = viewStack.pop();
break;
case MODEL:
modelMatrix = modelStack.pop();
break;
}
}
这样的代码现在可以很好地替换为:
public static void push() {
getStack().push(getMatrix().clone());
}
public static void pop() {
// setMatrix() also is a helper method of the same style, but does not produce a duplicate warning
setMatrix(getStack().pop());
}
因为我有点扯掉OpenGL(尽管OpenGL可能有这样做的原因,而我只是因为OpenGL而这样做),这意味着,有很多方法可以通过引入两个getMatrix()和getStack()(以及setMatrix()),删除了大量实际的代码重复,IntelliJ不会报告这样做。
我看不出如何使用不同的返回类型来概括两个方法。 那我的编程怎么样坏了,我该怎么办?或者IntelliJ是愚蠢的?
我认为代码重复功能非常好,所以我不想压制警告,但有时似乎弄错了。