Java 如何从属于泛型数据类型的成员检索值
我有一个getter方法Java 如何从属于泛型数据类型的成员检索值,java,Java,我有一个getter方法getSelected(),如下所示 public abstract class AbstractController<T> implements Serializable { @Inject private AbstractFacade<T> ejbFacade; private Class<T> itemClass; private T selected; public T getSele
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;
}
}
或变体2
selected:entities.Layoutmonitor[ layoutmonitorPK=entities.LayoutmonitorPK[ layoutid=18, monitorpointid=59, deviceid=102 ] ].
根据用户界面上的用户选择,将显示所选值。如果选择了场条目,则显示变量1;如果选择了Layoutmonitor条目,则显示变量2
如果用户选择layoutmonitor,是否有人可以帮助我从“selected”字段检索layoutid的值并键入layoutmonitor。在运行期间,服务器场也是如此。您询问的是一些特定的问题,而没有给出具体信息。对于您要问的一般性问题,有一个一般性的答案,即
一个抽象类如何通过泛型与另一个抽象类一起工作
,这有点复杂,您应该有一个更简单的示例
在您的例子中,AbstractController
是“抽象控制器”类。它的一个具体实现可能是“FileController扩展AbstractController”
您的第二个类是T
类型。在你的问题中,你说任何类型的T
至少有两个属性,layoutId
和layoutMonitor
。所以,任何可以表示T的东西都必须有这两个属性,而且由于它是泛型的,这意味着有不止一个类。这通常是通过一个抽象类完成的,我们称之为SelectorBase
<代码>选择数据库可能如下所示:
public abstract class SelectorBase {
int layoutId;
Object loytoutMonitor;
}
具体版本可能是TextSelector
,定义为TextSelector扩展SelectorBase
。不需要在这里上课。为了让您在AbstractController
类中处理SelectorBase
的任何扩展,您在以下泛型中声明:
public abstract class AbstractController<T extends SelectorBase> {
public T getSelected() {
return selected;
}
}
我不知道
Farm
是或layoutObject
是因为我不知道你在说什么代码。不过,通常情况下,这是您处理所述情况的方式。尝试使用instanceof运算符:
public T getSelected() {
if(selected instanceof Layoutmonitor){
//print layoutid and type layoutmonitor
}
return selected;
}
代码中的c是什么?我应该如何初始化c。你能给我解释清楚吗?
Farm
和Layoutmonitor
是否可以修改?这两个类有什么共同点?只有身份证?
FileControlller c = new FileController<TextSelector>();
TextSelector s = c.getSelected();
int layoutId = s.layoutId;
Object layoutMonitor = s.layoutMonitor();
.. and so on
public T getSelected() {
if(selected instanceof Layoutmonitor){
//print layoutid and type layoutmonitor
}
return selected;
}