Esper:在语法上定义具有子类型的类型?

时间:2014-10-02 16:11:16

标签: java esper

我必须在ESPER中定义下面的类,以便我能够引用子类型和内部数组。我必须务实地做到这一点。我不在乎如何:

更新完整的课程

 public class IoTEntityEvent implements java.io.Serializable  {

    private IoTProperty[] Properties;
    private String About;

    IoTEntityEvent (){
        this.About = null;
        this.Properties = null;
    }
    public String getAbout() {
        return About;
    }

    public void setAbout( String value){
        this.About = value;
    }
    public void setProperties(int index, IoTProperty value) {
        Properties[index] = value;
    }


    public IoTProperty getProperties(int index) {
        return Properties[index];
    }

    public void setProperties( IoTProperty[] value) {
        Properties = value;
    }


    public IoTProperty[] getProperties() {
        return Properties;
    }
}

这是子类:

   public class IoTProperty implements java.io.Serializable {
        private Map<String,String>[] IoTStateObservation =null;
        private String About = null;

        IoTProperty (){
            this.About = null;
            this.IoTStateObservation = null;
        }

        public String getAbout() {
               return About;
           }

        public void setAbout(String value) {
             About = value;
        }


        public Map<String,String>[] getIoTStateObservation() {
               return IoTStateObservation;
           }
        public void setIoTStateObservation( Map<String,String>[] value) {
             IoTStateObservation = value;
        }

        public Map<String,String> getIoTStateObservation(int index) {
            return IoTStateObservation[index];
        }
        public void setIoTStateObservation(int index, Map<String,String> value) {
            IoTStateObservation[0] = value;
        }
       }

我试过这样:

 eventNames[0] = "About";
 eventType[0] = String.class;

 eventNames[1] = "Properties";
 eventType[1] = IoTProperty[].class;

 epService.getEPAdministrator().getConfiguration().addEventType("type", eventNames, eventType);

这有效但我无法访问子类型。我也尝试以类似的方式定义子类型。有人可以解释一下我的想法吗?

3 个答案:

答案 0 :(得分:0)

你是什么意思“这有效,但我无法访问子类型。” 试过像“选择属性[0] .whatever”来自类型?

答案 1 :(得分:0)

根据Esper文件:

  

普通的Java对象事件是通过JavaBeans样式的getter方法公开事件属性的对象实例。事件类或接口不必完全符合JavaBean规范;但是,要使Esper引擎获取事件属性,必须存在所需的JavaBean getter方法,或者可以通过配置定义访问器样式和访问器方法。

简而言之,您需要创建JavaBean getter和setter才能访问您的私有成员。

答案 2 :(得分:0)

感谢您的帮助。我发现了如何以及如下:

epService.getEPAdministrator().getConfiguration().addEventType("type",IoTEntityEvent.class);

然后事件应该像这样发送而不进行任何转换:

IoTValue[] va=  {new IoTValue("0.62","2014-06-09T18:08:40.968Z","2014-06-09T18:08:40.968Z")};
IoTProperty[] pr = {new IoTProperty(va,"property")};
IoTEntityEvent event = new IoTEntityEvent(pr,"Entity");
epService.getEPRuntime().sendEvent(event);