Ich bin neu bei Apache Storm 0.9.5. Ich benutze Eclipse mit Maven. Java-Version 1.7.Verwirrung mit @Override Annotation
Versuch 1: Ich versuche, einen Beispielcode zu tun und folgte den Anweisungen im 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;
}
}
Die Fehlermeldung erhalte ich als
folgtüberschreibender Bereinigungsverfahren() vom Typ CallLogCreatorBolt muss eine Superklassenmethode
Und die schnelle Lösung zu
@Override Anmerkung entfernen
Wenn ich die Anmerkung entfernt Ich habe keine Fehler sehen. Wie wir wissen, hat IRichBolt
API eine Methode mit dem Namen cleanup()
mit den gleichen Parametern. Die Idee meiner Klasse CallLogCreatorBolt
ist, cleanup()
in IRichBolt
Klasse überschreiben.
1. Meine Frage ist, was ist das Problem in meiner Verwendung @Override
?
Versuch 2: ich alle Methoden innerhalb der Klasse gelöscht CallLogCreatorBolt
. Dann klickte ich auf Add unimplemented methods
Option, die Eclipse bietet.
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;
}
}
Wenn Sie bemerken, habe ich @Override
für cleanup()
Methode allein hinzugefügt. Ich erhalte den gleichen Fehler wie bei meinem ersten Versuch. Aber andere Methoden sind in Ordnung.
Bitte vergib mir, wenn ich etwas sehr Grundlegendes verpasse! Danke im Voraus.
Scheint, wie ur Problem gelöst [hier] (http://stackoverflow.com/questions/1678122/must-override-a-superclass-method-errors-after-importing-a -project-in-eclips). – f1sherox
@ f1sherox: Vielen Dank. hat für mich gearbeitet! – Andy