簡體   English   中英

使用HashMap存儲實例變量?

[英]Use a HashMap to store instance variables?

我想創建一個基類,我的程序中的所有類都將擴展。 我想做的一件事是找到一種統一的方法來存儲對象內的所有實例變量。

我想到的是使用HashMap存儲對象的鍵/值對,然后通過get和set方法公開這些值。

到目前為止我的代碼如下:

package ocaff;

import java.util.HashMap;

public class OcaffObject {

    private HashMap<String, Object> data;

    public OcaffObject() {
        this.data = new HashMap<String, Object>();
    }

    public Object get(String value) {
        return this.data.get(value);
    }

    public void set(String key, Object value) {
        this.data.put(key, value);
    }

}

雖然功能上有用,但我很好奇這個實現是否存在任何實際問題,或者有更好的方法可以做到這一點?

在我的日常工作中,我是一名PHP程序員,我的目標是模仿我在PHP中用於Java的功能。

我不認為這是處理你的意思的好方法。 從我的角度來看,java編程與php編程完全不同。

您需要使用干凈的面向對象編程的真實范例來保持干凈和強類型。

我想到了這種技術的一些問題,這里有一些問題,而不是重要性。

  1. 你遇到的第一個問題是性能和內存占用:這將占用大量內存並且性能非常差。

  2. 第二個問題是並發性,HashMap不是線程安全的。

  3. 第三個問題是類型安全:你不再具有類型安全性,你可以寫任何你想要的字段,沒有人檢查它,一個真正的反模式。

  4. 第四個問題是調試......調試代碼很難。

  5. 第五個問題是:每個人都可以在知道他的名字的情況下寫和讀任何字

  6. 第六個問題:當您更改哈希集中字段的名稱時,您不會遇到任何類型的編譯時錯誤,您只會獲得奇怪的運行時行為。 重構將變得不可能。

鍵入的字段更有用,更干凈。

如果你正在花時間為此做一個課程,我會簡單地添加你所需要的課程成員。 這將為您的班級成員提供編譯時間檢查,從而大大減少您的微妙錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM