جدول هاش ثابت مع متغير مفتاح الاستدعاء قراءة موضوع المحلي

StackOverflow https://stackoverflow.com/questions/1439603

  •  10-07-2019
  •  | 
  •  

سؤال

والمشكلة هي أن لدي مكتبة خدمة الويب القديمة التي لديها جدول هاش من الخيارات العالمية التي يجمع مع جدول هاش من الخيارات الطلب. I cann't التأثير كود الطلب، ولكن يمكنني أن تعيين جدول هاش العالمي. وكنت مجرد لافتة إذا كان هناك طريقة بسيطة لتنفيذ ارشادية لفئة Hashtable من شأنها أن تؤدي إلى رد لبعض من المفتاح لقراءة بعض متغير موضوع المحلي بدلا من القيمة الأصلية؟

تعديل : ل. نسيت أن أذكر أنني بد أن JDK 1.4.2

هل كانت مفيدة؟

المحلول

ويمكنك إنشاء فئة جديدة مشتقة من Hashtable وتجاوز أسلوب get().

وبناء على مدونة twolfe18:

public class MyHashMap<K, V> extends HashMap<K, V> {
  TheadLocal special = new TheadLocal ();

  public MyHashMap<K, V>() {
    super();
  }

  public V get(K key) {
    if ("special".equals (key))
       return special.get ();

    return super.get(key);
  }
}

لتعيين القيمة، واستخدام map.special.set(value). فإن القيمة ستكون مختلفة لكل موضوع.

نصائح أخرى

وجاء التنسيق من الرهيب في تعليق على رد هارون حتى هنا هو:

public class MyHashMap<K, V> extends HashMap<K, V> {

  public MyHashMap<K, V>() {
    super();
  }

  public V get(K key) {
    // check the key or whatever you need to do
    V value = super.get(key);
    // check the value or whatever you need to do
    return value;
  }

}

وهنا هو رمز كنت في نهاية المطاف:

package util;

import java.util.Hashtable;

public class SingleThreadLocalHashtable extends Hashtable {

    /** Class version. */
    private static final long serialVersionUID = 1L;

    private ThreadLocal holder = new ThreadLocal();

    private String specialKey;

    public SingleThreadLocalHashtable(String specialKey) {
        super();
        this.holder.set(null);
        this.specialKey = specialKey;
    }

    public synchronized Object get(Object key) {
        if ((specialKey != null) && specialKey.equals(key)) {
            return holder.get();
        }
        return super.get(key);
    }

    public synchronized Object put(Object key, Object value) {
        if ((specialKey != null) && specialKey.equals(key)) {
            holder.set(value);
        }
        return super.put(key, value);
    }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top