2

この警告が表示されます。コードは次のとおりです。

Hashtable nu=new Hashtable();
Hashtable ns=new Hashtable();
nu.put(new String("postmaster"),new String("admin"));
ns.put(new String("SMTP"),new String(""));
ns.put(new String("POP3"),new String(""));
ns.put(new String("EMAIL"),new String(""));
ns.put(new String("USER"),new String(""));
ns.put(new String("PASS"),new String(""));

警告: [チェックされていない] raw タイプ Hashtable のメンバーとしての put(K,V) のチェックされていない呼び出し

4

3 に答える 3

4

Hashtableジェネリックタイプです。使用中に型引数を渡すことにより、対応するパラメーター化された型を使用する必要があります。クラス名をそのまま使用するのHashtableは生の型であり、使用する必要がある一部の場所を除いて推奨されません。

したがって、オブジェクトを次のようにインスタンス化します。

Hashtable<String, String> nu = new Hashtable<String, String>();

ただし、 . の使用も避ける必要がありますHashtable。その理由は、のすべての操作Hashtableが同期されているためです。これは本当に必要ありません。これにより、実行が不必要に遅くなります。代わりにa を使用することをお勧めしますHashMap。次のように使用できます。

Map<String, String> map = new HashMap<String, String>();
Map<String, String> map2 = new HashMap<>();   // Valid from Java 7 onwards

それとは別に、マップに追加する際に、 をString使用して新しいオブジェクトを作成する必要はありません。new String(...)不要なオブジェクトの作成を避けるために、文字列リテラルを使用してください。

nu.put("postmaster", "admin");  // Will work fine

関連している:

于 2013-10-29T12:28:28.567 に答える
0

Hashtable2 つのジェネリック型パラメーターを持つジェネリック クラスです。

試す:

Hashtable<String, String> nu = new Hashtable<>();

汎用パラメーター (この例ではStringand ) を指定する必要はありません。Stringただし、それらを指定しないと、前述の警告が表示されます。

詳細については、 Hashtable javadocおよびOracle Java ドキュメントのジェネリックに関するセクションを参照してください。

于 2013-10-29T12:26:36.243 に答える
0

を宣言するときにジェネリック型を使用する場合Hashtable、警告は消えます。

Hashtable<String, String>

またはさらに良いのは、インターフェイスへのコードです。

Map<String, String> ns = new Hashtable<String, String>();

Hashtableそして、たとえば、Map よりも優れた実装を見つけることができるかもしれませんHashMap:

Map<String, String> ns = new HashMap<String, String>();
于 2013-10-29T12:26:55.077 に答える