2011-10-30 49 views

回答

1

捕獲一切強制轉換是很容易使用自定義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,它包含一些關於使用的細節。

+0

這太棒了 - 沒有什麼大不了的,明確的upcasts也會被捕獲。這麼晚纔回復很抱歉。 –

相關問題