2013-10-21 79 views
2

我有兩個班,ClassOneClassTwo,該更新公共領域data訪問字段變量

public class ClassOne { 
    public byte[] data = new byte[10]; 

    // Thread that updates data 

} 

public class ClassTwo { 
    public byte[] data = new byte[10]; 

    // Thread that updates data 

} 

只有一個類及其相關的線程運行在任何時候,即應用程序在運行時檢測到數據源,並使用ClassOneClassTwo。我想分析一個名爲ParseMyData的單獨課程中的數據,但有點困惑,因此設置該課程的最佳方法是讓ParseMyData可以從ClassOneClassTwo訪問data

我目前嘗試使用泛型它做的,是這樣的:

public class ParseMyData<T> { 

    T classOneOrClassTwo; 

    ParseMyData(T t) { 
     classOneOrClassTwo = t; 
    } 

    public void parseIt() { 
     // Need to access data from either ClassOne or ClassTwo here, something like: 
     classOneOrClassTwo.data; // this obviously doesn't work 
    } 

所以我的問題是如何從類ParseMyData內訪問現場data?我必須使用反射嗎?反射是唯一和最好的方法嗎?

新的泛型和反思,所以思想和指針非常讚賞。

+0

「ClassOne」和「ClassTwo」都可以實現提供訪問方法的接口。這在線程程序中可能不是一個好主意。 – Meesh

回答

4

使用方法getData()創建接口DataProvider,該方法返回您的data字段。 然後在你的課ParseMyData<T>,你會寫ParseMyData<T extends DataProvider>

public class ParseMyData<T extends DataProvider> { 

    T classOneOrClassTwo; 

    ParseMyData(T t) { 
     classOneOrClassTwo = t; 
    } 

    public void parseIt() { 
     classOneOrClassTwo.getData(); 
    } 

或者您還可以使用您的版本,但是首先要做的instanceof檢查,然後投要麼ClassOneClassTwo。但我建議你選擇第一個選項。

+0

太棒了。首先今天早上去泛型,並沒有意識到你可以用一個接口來擴展它。如你所寫的那樣有意義 - 我會測試它,並在完成時記錄/標記等。日Thnx。 –