2016-07-06 7 views
0

Genauer gesagt, in hadoop MapReduce-Programmen, wenn Sie benutzerdefinierte Klassen verwenden, muss die Klasse Writeable-Schnittstelle implementieren. und alle seine Mitglieder müssen beschreibbar sein, z.B.ist es eine gute Idee, Getter/Setter-Methoden zu verwenden, um die Java-Objekte in Writeable Objects einzubinden/auszupacken?

aber seit Text, LongWritable, IntWritable etc. Klassen sind schreibbare Wrapper-Klassen für primitive Datentypen. Sie können nicht regelmäßig Manipulationen mit ihnen zu tun, wie arithmetischen Operationen oder String-Manipulation usw.

mit Getter Setter-Methoden wie

public String getStationId(){ 
    return this.stationId.toString(); 
} 

public void setStationId(String stationID){ 
    this.stationId = new Text(stationID); 
} 

vorteilhaft wären, wie die Außenwelt diese Elemente als reguläre Java-Klassen behandeln kann, aber intern werden sie als Objekte beschreibbarer Klassen gespeichert.

Meine Frage ist, ob es eine gute Programmierpraxis ist oder nicht. Was sind mögliche Fallstricke mit solchen Getter/Setter-Methoden?

Antwort

0

Es scheint mir keine gute Übung zu sein. Werfen Sie einen Blick auf die Writable Interface Documentation. Alles, was Sie wirklich tun müssen, ist die Implementierung der Methoden readFields() und write(). (Ihre Klassenmitglieder müssen nicht selbst beschreibbar sein - Siehe das Beispiel in der Dokumentation.)

+0

Danke für die Antwort. Ich dachte an Writable als ähnlich wie Serializable. Von dort kam die Verwirrung. – user2368812