[英]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
任何事物至少具有兩個屬性layoutId
和layoutMonitor
。 因此,任何可以表示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.