簡體   English   中英

如何從通用數據類型的成員中檢索值

[英]how to retrieve value from member which is generic data type

我有一個getter方法getSelected()如下

public abstract class AbstractController<T> implements Serializable {
     @Inject
    private AbstractFacade<T> ejbFacade;
    private Class<T> itemClass;
    private T selected;

    public T getSelected() {
        System.out.println("selected:"+selected);
        return selected;
    }
}

System.out.println("selected:"+selected); 語句將打印以下變體1

selected:entities.Farm[ farmPK=entities.FarmPK[ farmid=20, deviceid=102 ] ]

或變體2

selected:entities.Layoutmonitor[ layoutmonitorPK=entities.LayoutmonitorPK[ layoutid=18, monitorpointid=59, deviceid=102 ] ].

根據用戶在用戶界面上的選擇,顯示選定的值。 如果選擇服務器場條目,則顯示變量1。如果選擇Layoutmonitor條目,則顯示變量2。

如果用戶選擇layoutmonitor,誰能幫助我檢索layoutid的值並從“ selected”字段中鍵入layoutmonitor。 對於運行時期間的服務器場類似。

您是在詢問一些特定的問題而沒有提供詳細信息。 對於您要問的一般問題,有一個一般性的答案,那就是how does one abstract class work with another abstract class through generics ,這有點復雜,您應該有一個更簡單的示例。

在您的情況下, AbstractController是“抽象控制器”類。 它的一個具體實現可能是“ FileController extended AbstractController”。

您的第二堂課是T型的。 在您的問題中,您說類型T任何事物至少具有兩個屬性layoutIdlayoutMonitor 因此,任何可以表示T的東西都必須具有這兩個屬性,並且由於它是通用的,因此暗示存在多個類。 通常,這是通過抽象類完成的,我們將其稱為SelectorBase SelectorBase可能看起來像這樣:

public abstract class SelectorBase {
    int layoutId;
    Object loytoutMonitor;
}

一個具體的版本可能是TextSelector ,定義為TextSelector extends SelectorBase 無需在這里展示課程。 為了使您可以在SelectorBase任何擴展上使用AbstractController類,請在泛型中聲明如下:

public abstract class AbstractController<T extends SelectorBase> {
    public T getSelected() {
        return selected;
    }
}

T extends SelectorBase是您問題的答案。 T被定義為擴展SelectorBase的類。 這就是您“從“選定”字段中檢索layoutid的值並鍵入layoutmonitor的方式”。 您可以使用此類的類genericized interface

FileControlller c = new FileController<TextSelector>();
TextSelector s = c.getSelected();
int layoutId = s.layoutId;
Object layoutMonitor = s.layoutMonitor();
.. and so on

我不知道Farm是或layoutObject是因為我不知道您在說什么代碼。 通常,這就是您處理所描述情況的方式。

嘗試使用instanceof運算符:

public T getSelected() {
 if(selected instanceof Layoutmonitor){
 //print layoutid and type layoutmonitor 
 }
     return selected;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM