1
想知道是否有報告工具(如PMD)報告Java代碼中的向下轉換。有沒有一種工具可以在Java中報告downcasts?
想知道是否有報告工具(如PMD)報告Java代碼中的向下轉換。有沒有一種工具可以在Java中報告downcasts?
捕獲一切強制轉換是很容易使用自定義PMD規則:
import net.sourceforge.pmd.AbstractJavaRule;
import net.sourceforge.pmd.ast.ASTCastExpression;
public class CastRule extends AbstractJavaRule {
public CastRule() {
}
@Override
public Object visit(final ASTCastExpression node, final Object data) {
addViolation(data, node);
return super.visit(node, data);
}
}
不幸的是它也抓住upcasts如果他們是明確upcasts。例如:
final Number myNumber = 5;
final Integer myInteger = (Integer) myNumber; // catched
final Number myNumber2 = (Number) myInteger; // catched
final Number myNumber3 = myInteger; // NOT catched
僅捕獲向下轉換看起來相當複雜的PMD。
也檢查this answer,它包含一些關於使用的細節。
這太棒了 - 沒有什麼大不了的,明確的upcasts也會被捕獲。這麼晚纔回復很抱歉。 –
什麼是終結? –
findbugs:http://findbugs.sourceforge.net/bugDescriptions.html#BC_IMPOSSIBLE_DOWNCAST –
亞歷克斯,該規則發現只是_impossible_ downcasts –