Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从属于泛型数据类型的成员检索值_Java - Fatal编程技术网

Java 如何从属于泛型数据类型的成员检索值

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

我有一个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;
    }
}
或变体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;
    }