2016-02-29 65 views
0

在Java中使用反射允許我瞭解有關參數和每個類函數的返回類型的信息,但是我想知道是否存在一種方法來知道是否使用了屬性在一個函數(在同一個班):知道類屬性中是否使用類屬性

public class ClassExample { 
    private String propertyExample; 

    public void function1() { 
     ... 
    } 

    public void function2() { 
     ... 
     propertyExample = ""; 
     ... 
    } 

    public Integer function3 (String parameter) { 
     ... 
     propertyExample = parameter; 
     ... 
    } 
    } 

在這種情況下,我需要知道propertyExample功能2功能3使用。

在此先感謝。

+2

可能這會幫助你:http://stackoverflow.com/questions/21783015/how-to-get-the-object-reference-of-a-field-of-an-object-using-reflection – Vishrant

+2

這不是一種反思的能力。你必須測試字節碼才能檢測到。 –

+0

有沒有特定的用途?否則,顯而易見的解決方案是,只要您更改propertyExample,就可以隨時從函數中返回例如布爾值(changed = true)。試圖通過更多細節來了解問題。 – Michael

回答

1

不,不幸的是不解析字節碼是不可能的。

+0

這是我擔心的,謝謝。 – doctore

+0

無論如何,您的問題可能會有解決方案:)正如其他人指出的那樣,試着解釋您需要的原因,也許我們可以想辦法解決這個問題。 –

0

免責聲明:在判斷之前請閱讀完整答案。

標記字段final將允許編譯器警告您該字段已被使用(已分配)。

public class ClassExample { 
    private static final String propertyExample; 

    public void function1() { 
     ... 
    } 

    public void function2() { 
     ... 
     propertyExample = ""; //<-- compiler tells you that propertyExample is used (assigned) 
     ... 
    } 

    public Integer function3 (String parameter) { 
     ... 
     propertyExample = parameter; //<-- compiler tells you that propertyExample is used (assigned) 
     ... 
    } 
} 

儘管我的答案提供了一個解決方案,但我確定它不符合您的期望。正如Edvin Syse所說,不解析字節碼是不可能的。

但是,這個問題存在一個根本性問題,我們不知道。您只向我們展示了您認爲可以解決問題的解決方案。如果您與我們分享真正的問題,SO社區可能對您更有用,並能夠幫助您找到解決問題的準確解決方案(也許:-))。

+0

感謝您的回答,但我無法將條款最終添加到需要更改「屬性」的屬性中。另一方面,我在哪裏寫了解決方案?我寫了一個「虛擬用例」,因爲「這個問題」是我想要做的一小部分功能。 – doctore

+0

@doctore爲什麼你想知道代碼中是否使用類屬性?對於軟件功能來說這不是一個常見的要求。 我看到的唯一案例(從我的有限觀點來看)是您正在開發一些靜態代碼分析器,分析器,... – Spotted