事情是我需要prop2直到一個級別來執行一些操作,但我需要在oData調用之前將其刪除,是否有可能?
不是我所知道的。另外,我不知道oData,你的問題有點難以回答你提供的信息。然而,基於上述意見,我會建議兩兩件事:
方法一:減少類
public class Test {
private long prop1;
private long prop2;
/* getters, setters, ...*/
}
public class TestReduced {
private long prop1;
public TestReduced(Test test) {
this.prop1 = test.getProp1();
}
/* getters, setters, ...*/
}
換句話說,創建一個類,類似於Test
,棒材不需要會員。在它的構造中,手的所有其他成員複製Test
對象,有效地創建一個可用於OData的副本:
Test test1 = new Test();
test1.setProp1(1337L);
test1.setProp2(1007L);
/* Do something with test1, including prop2 */
TestReduced test2 = new TestReduced(test1);
/* Do oData stuff with test2, no prop2 anymore */
這是一個相當複雜的解決方案,它需要你所有的變化反映到Test
在TestReduced
。一個共同的接口或抽象基類可以很好地保護這個過程,所以我肯定會建議,如果你這樣做,將一個到位。您還應該考慮添加一個專用構造函數而不帶參數TestReduced
以確保只能從Test
對象創建這些構造函數。或者,讓Test
類使用getReducedInstance()
等方法創建TestReduced
的實例,這將使Test
a factory。
方法2:會員地圖
怎麼樣,而不是有兩個成員,prop1
和prop2
,您可以使用地圖?
public class Test {
private HashMap<String, Long> props = new HashMap<>();
public Test() {
props.put("prop1", 0L);
props.put("prop2", 0L);
}
public void setProp1(long prop1) {
props.put("prop1", p);
}
public void setProp2(long prop2) {
props.put("prop2", p);
}
public long getProp1() {
props.get("prop1");
}
public long getProp2() {
props.get("prop2");
}
public void prepareForSerialization() {
props.remove("prop2");
}
}
這是否適用於oData,我不知道。但它肯定是處理任意數量屬性的一種非常靈活的方式。使用你的getter和setter,你可以隱藏實現(HashMap
與原始類型memebers)。或者,如果您願意,可以通過提供諸如getProp(String name)
和setProp(String name, long value)
等方法將其公開給用戶。所有這些假設你的道具都是long
。
顯然,這將是更好,如果你只是有你的序列化(?)的目的,一個包括prop1
,一個不兩種方法。但是既然你明確表示你需要刪除的成員,這是我想到的。
我會假設你會有某種序列化器(它將數據更改爲JSON,XML等)。通常你可以指定哪些字段使其成爲序列化結果,哪些不是。你需要包括你的班級如何被序列化,以便我們有更好的幫助。 – npinti
如果這是您發送數據的方式,那麼在發送之前有一個單獨的方法並調用該方法可能會很有用。 – npinti
最糟糕的情況是,如果沒有prop2('TestReduced'),您可以擁有一個類似的類,該類具有一個構造函數,該構造函數接受'Test'對象並基本上覆制* * prop2的所有內容。然後,只要你需要prop2,你就可以使用你的'Test'對象,並且一旦你需要做一些不應該接觸到'prop2'的東西,就從它創建'TestReduced' *。有點複雜,但它會完成工作。 – domsson