0
我有一個第三方類,我試圖在Hadoop中使用,因此需要讓它實現Writable
。問題是,Hadoop的使用Writable
的方式是創建一個對象o = SomeObject()
,然後調用o.readFields(in)
反序列化,並在我的情況,我不能創建空的對象:將第三方類擴展爲Hadoop可使用代理書寫
public abstract class Cube {
protected final int size;
protected Cube(int size) { this.size = size; }
}
注size
是final
。
public class RealCube {
public Cube(int size) { super(size); }
}
這裏RealCube
只有一個超級構造函數調用,而construtor設置在抽象的超類final
變量。
public class RealCubeWritable implements Writable {
public void readFields(DataInput in) {
/* yikes! need to set the size */
}
}
當我們坐下來試圖實現RealCubeWritable
,我不能有一個RealCubeWritable()
構造函數,我不知道實際size
直到DataInput
流進行檢查。
所以在Hadoop中這樣做的唯一方法就是使用包裝器。我想知道的是,如果有辦法使用包裝,但RealCubeWritable
仍然像RealCube
?我研究過使用動態代理類,但我不確定這是否可行(或如何實際執行)。
謝謝!
控制多維數據集是可能的,這只是不受歡迎的,因爲這意味着我必須維護上游的變化。我認爲勝利是值得的 - 除了我提到的問題之外,還有很多不良的屬性,這會導致大量不必要的複製和分配。 我認爲反思的想法是我最初的想法。我真的不知道任何細節,但這似乎相關:http://docs.oracle.com/javase/1.3/docs/guide/reflection/proxy.html – 2012-03-29 02:47:04
您只能使用代理與接口雖然,我仍然不知道這將如何解決你的「最終」問題 – 2012-03-29 02:49:48
葉......感謝指針! – 2012-03-29 04:16:14