Java unchecked code
<p>I write a simple class (the merit of StringPools themselves is not my question; I have specific reasons for wanting this class):</p>

<pre><code>import java.lang.ref.WeakReference;
import java.util.WeakHashMap;

public final class StringPool {

    private WeakHashMap m_pool = new WeakHashMap();

    public String intern(String s) {
        WeakReference reference = (WeakReference)m_pool.get(s);
        if(reference != null) {
            String interned = (String)reference.get();
            if(interned != null)
                return interned;
        }
        m_pool.put(s,new WeakReference(s));
        return s;
    }
};
</code></pre>

<p>When I compile it, the compiler notes it uses unchecked or unsafe operations:</p>

<pre><code>warning: [unchecked] unchecked call to WeakReference(T) as a member of the raw type WeakReference       
    m_pool.put(s,new WeakReference(s));
    ^   where T is a type-variable:
    T extends Object declared in class WeakReference 

warning: [unchecked] unchecked call to put(K,V) as a member of the raw type WeakHashMap 
    m_pool.put(s,new WeakReference(s));
    ^   where K,V are type-variables:
    K extends Object declared in class WeakHashMap
    V extends Object declared in class WeakHashMap

2 warnings
</code></pre>

<p>How should I fix these warnings so the code compiles clean and is correct?</p>
