2016-04-04 78 views
0

我是Apache Storm 0.9.5的新手。我正在使用eclipse和maven。 Java版本-1.7。@Override注释混淆

尝试1: 我试图做一个示例代码和接着在page

import java.util.*; 
//import storm tuple packages 
import backtype.storm.tuple.Fields; 
import backtype.storm.tuple.Values; 

//import Spout interface packages 
import backtype.storm.topology.IRichSpout; 
import backtype.storm.topology.OutputFieldsDeclarer; 
import backtype.storm.spout.SpoutOutputCollector; 
import backtype.storm.task.TopologyContext; 

//Create a class FakeLogReaderSpout which implement IRichSpout interface 
    to access functionalities 

public class FakeCallLogReaderSpout implements IRichSpout { 
    //Create instance for SpoutOutputCollector which passes tuples to bolt. 
    private SpoutOutputCollector collector; 
    private boolean completed = false; 

    //Create instance for TopologyContext which contains topology data. 
    private TopologyContext context; 

    //Create instance for Random class. 
    private Random randomGenerator = new Random(); 
    private Integer idx = 0; 

    @Override 
    public void open(Map conf, TopologyContext context, SpoutOutputCollector collector) { 
     this.context = context; 
     this.collector = collector; 
    } 

    @Override 
    public void nextTuple() { 
     if(this.idx <= 1000) { 
     List<String> mobileNumbers = new ArrayList<String>(); 
     mobileNumbers.add("1234123401"); 
     mobileNumbers.add("1234123402"); 
     mobileNumbers.add("1234123403"); 
     mobileNumbers.add("1234123404"); 

     Integer localIdx = 0; 
     while(localIdx++ < 100 && this.idx++ < 1000) { 
      String fromMobileNumber = mobileNumbers.get(randomGenerator.nextInt(4)); 
      String toMobileNumber = mobileNumbers.get(randomGenerator.nextInt(4)); 

      while(fromMobileNumber == toMobileNumber) { 
       toMobileNumber = mobileNumbers.get(randomGenerator.nextInt(4)); 
      } 

      Integer duration = randomGenerator.nextInt(60); 
      this.collector.emit(new Values(fromMobileNumber, toMobileNumber, duration)); 
     } 
     } 
    } 

    @Override 
    public void declareOutputFields(OutputFieldsDeclarer declarer) { 
     declarer.declare(new Fields("from", "to", "duration")); 
    } 

    //Override all the interface methods 
    @Override 
    public void close() {} 

    public boolean isDistributed() { 
     return false; 
    } 

    @Override 
    public void activate() {} 

    @Override 
    public void deactivate() {} 

    @Override 
    public void ack(Object msgId) {} 

    @Override 
    public void fail(Object msgId) {} 

    @Override 
    public Map<String, Object> getComponentConfiguration() { 
     return null; 
    } 
} 

给出的说明我接收的错误消息是如下

的方法清理()CallLogCreatorBolt类型必须重写 超类的方法

和快速的解决办法是

当我删除注释我没有看到任何错误删除@Override批注

正如我们所知,IRichBolt API有一个名称为cleanup()的方法具有相同的参数。我的班级CallLogCreatorBolt的想法是覆盖IRichBolt类中的cleanup()

1.我的问题是我使用@Override时出现什么问题?

尝试2: 我删除了所有类CallLogCreatorBolt里面的方法。然后我点击了eclipse提供的Add unimplemented methods选项。

public class CallLogCreatorBolt implements IRichBolt { 

    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) { 
     // TODO Auto-generated method stub 
    } 

    public void execute(Tuple input) { 
     // TODO Auto-generated method stub 
    } 

    @Override 
    public void cleanup() { 
     // TODO Auto-generated method stub 
    } 

    public void declareOutputFields(OutputFieldsDeclarer declarer) { 
     // TODO Auto-generated method stub 
    } 

    public Map<String, Object> getComponentConfiguration() { 
     // TODO Auto-generated method stub 
     return null; 
    } 
} 

如果你发现,我已经独自cleanup()方法添加@Override。我在第一次尝试时收到了同样的错误。但其他方法很好。

请原谅我,如果我错过了一些非常基本的东西!提前致谢。

+1

好像乌尔问题解决了[这里](http://stackoverflow.com/questions/1678122/must-override-a-superclass-method-errors-after-importing-a -project - 进入 - 文摘)。 – f1sherox

+0

@ f1sherox:非常感谢。为我工作! – Andy

回答

1

感谢@ f1sherox

的问题是与JRE版本。 该项目在JRE1.5中执行。但理想情况下,它至少应该是1.6。

修复的方法是如下:

你的项目右键单击项目资源管理器/导航面板中看到 - >选择属性 - > Java构建路径 - >选择在JRE系统库[JavaSE的-1.5] - >点击编辑按钮 - >选择你想要的合适的JRE版本[我选择了1.7版本] - >完成 - >应用并确定。

我们做了:)