2010-11-22 94 views
3

我的應用程序類使用一個庫中包含默認的兩個變量。有什麼辦法可以從超類中省略變量嗎?

// A class from framework: 

public class SuperClass implements Serializable { 

    private long id; 
    private long version; 

    // getter and setter methods for these variables... 

} 

我應該擴展這個類,以訪問框架的一些功能。

如果我擴展此類以我自己的類這樣的:

public class MyClassChild extends SuperClass { 

    private long myprimarykey; 
    private String some column; 
    private long myversion; 

    // getter and setter methods for these variables... 

} 

按照編程模型,這兩個變量也可以訪問。 在執行需要SuperClass類型的對象的操作時。

是否有任何想法擴展該SuperClass不包括這兩個變量(id, version)

我不知道該怎麼辦?

任何建議請問?

謝謝

+2

這些變量在您的子類中是如何顯示的?他們被宣佈爲私人,不受保護。 – 2010-11-22 03:32:43

+2

我猜你正在使用這樣的ORM框架,如休眠或JPA?你可以看到這些變量的唯一方法是通過反射。僅僅是你不想讓這些變量在你的子類中持久存在? – 2010-11-22 03:47:46

+0

正是男人。如何不堅持這兩個變量? – 2010-11-22 03:49:49

回答

1

一般JPA不會讓你覆蓋超映射刪除屬性,但根據您的供應商有可能做到以下幾點:

public class MyClassChild extends SuperClass { 

    private long myprimarykey; 
    private String some column; 
    private long myversion; 

    // Override superclass mappings 
    @Transient 
    long getId() { return super.getId(); } 
    @Transient 
    void setId(long id) { return super.setId(long id); } 
    // etc... 
} 

編輯

此外,也可以通過使用@AttributeOverride註釋來覆蓋映射超類中各個列的值,例如

@AttributeOverride(name="id", [email protected](name="EMP_ID")) 
@Entity 
public class MyClassChild extends SuperClass { 

    private String some column; 
    ... 
} 
+0

我的問題是變量名。我不想讓Id和'版本'的版本一樣。我的意思是,想要有其他名字。 – 2010-11-22 04:07:22

+0

你的意思是表中的列名或類中的實際方法名,或者兩者都有? – 2010-11-22 04:18:55

+0

當我執行'選擇,插入或任何操作'的任何操作時,這兩個變量'id'&'version'應該在數據庫表中。但是,如果在persistence.xml中添加'',則這兩個變量將直接映射到創建數據庫表列。我想要做的是使用我的主鍵,例如:「EMP_ID」而不是「ID」,而'版本'不是一個大問題。 – 2010-11-22 06:02:26

1

沒有。如果你繼承,你會讓整個班級都來。如果你不想繼承所有的字段,那麼你並沒有設計一個子類。

想象一下,如果您可以省略變量會發生什麼 - 繼承方法會對現在缺少的狀態做些什麼?一切都會中斷...

+0

無法實現這種操作? – 2010-11-22 03:35:35

+0

不,它不能實現。 – dteoh 2010-11-22 03:37:45

1

所有你能做的就是讓這個變量專用於超類,使得子類不會「看見」它。

0

當你擴展一個類時,你應該添加更多的變量和方法,你不能減去。

3

您不能刪除這些字段,但可以覆蓋getter和setter以執行默認操作(取決於其訪問修飾符,但它們可能爲protected或更大)。例如,這樣您可以停止外部分配這些變量。如果你選擇這條路線,我建議你熟悉這些字段在超類中的使用方式,以便你能預見到任何連鎖行爲。

相關問題