質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

2412閲覧

Hashtableクラスについて

退会済みユーザー

退会済みユーザー

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/08/26 07:30

編集2016/08/27 09:26

Hashtableクラスってバージョン1.8ではジェネリクスのものしかないのでしょうか?
私の使っている本では

Java

1Hashtable table = new Hashtable();

のような記述があると同時に

Java

1ArrayList<String> list = new ArrayList<String>();

のような記述もあります。
ジェネリクスが導入されたのは1.5だと聞きました。
そうすると、1.5ではないバージョンでHashtableがジェネリクスになったのでしょうか?
また、Hashtableの型パラベータにboolean型を使いたいのですが、使えないようです。
どうしたら、使えるのでしょうか?
ご存知の方、回答お願いします。

補足です。
Boolean型ですが、これが使えないのです。
具体的にはIDEで、赤線が引かれ、
「Type'sun.jvm.hotspot.utilities.Hashtable' does not have type parameters」
と表示されてしますのです。
プリミティブ型のboolean型は当然使えませんが、ラッパークラスであるBoolean型も使えないのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/08/27 13:44

その周りの文脈がないと難しいかもしれません。文脈的に見てもいわゆる通常のHashtableのことなら、単なる誤植を疑うべきかと。
guest

回答4

0

ベストアンサー

「Type'sun.jvm.hotspot.utilities.Hashtable' does not have type parameters」

sun.jvm.hotspotパッケージは公開APIではないので、通常のプログラムからは使うべきでありません。本来はjava.util.Hashtable<K,V>クラスを使うべきところを、誤ってsun.jvm.hotspot.utilities.Hashtableクラスをimportしたために起きているエラーです。クラス名は(偶然)同じですが、両クラスの機能は全く異なります。

sun.jvm.hotspotパッケージは何のために存在するのでしょうか?

Serviceability in HotSpotのServiceability Agent(SA) APIを提供するパッケージです。Java仮想マシン(JVM)の開発者向けです。

投稿2016/08/27 12:35

編集2016/08/28 07:40
yohhoy

総合スコア6191

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/27 13:40

sun.jvm.hotspotパッケージは何のために存在するのでしょうか? ご存知だったら、回答お願いします。
退会済みユーザー

退会済みユーザー

2016/08/28 08:42

回答ありがとうございました。
guest

0

Java

1Hashtable table = new Hashtable();

はジェネリクス導入以前(1.5より前)の古い書き方で、

Java

1Hashtable<Object, Object> table = new Hashtable<Object, Object>();

とほぼ同じ物だと解釈されます。

ジェネリクス導入以前は、ListやMapの各要素はObject型であれば何でも入れられるとなっていました。互換性のために古い書き方を残しています(ただし、コンパイル時にunchecked警告がでます)ので、1.8でも使用できます。ただ、古い書き方は、ジェネリクス部分の型チェックされなかったり、明示的なキャストが必要になりますので、使用するメリットはありません。普通にジェネリクスを使うことをお勧めします。

なお、古い書き方が記載されている本やサイトは、全体的に情報も古い場合があります。なるべく新しいバージョン対応の本やサイトを参考にすることをお勧めします。

boolean型の使用については、他の方の回答を参考にしてください。

投稿2016/08/26 20:02

raccy

総合スコア21735

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ジェネリックスは1.5からです。

参考
http://www.ne.jp/asahi/hishidama/home/tech/java/generics.html

1.8だとクラスHashtable<K,V>です。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Hashtable.html

プリミティブ型を格納したい場合、ラッパークラスを使います。

lang

1 Hashtable<String, Boolean> h = new Hashtable<>();

投稿2016/08/26 07:55

java-beginner

総合スコア452

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

java-beginner

2016/08/27 10:43

補足についてですが、import文を確認してください。 通常は import java.util.Hashtable; だと思います。
退会済みユーザー

退会済みユーザー

2016/08/27 11:35

解決しました。 ありがとうございました。 importされていたのはsun.jvm.hotspot.utilities.Hashtableというものだったんですが、これは昔のAPIなのでしょうか?
java-beginner

2016/08/27 12:23

すみません。そこまでは分かりません。
退会済みユーザー

退会済みユーザー

2016/08/27 12:44

sun.jvm.hotspot に関しては https://ja.wikipedia.org/wiki/HotSpot を参考にしてください。 基本 sun から始まるパッケージは開発では使いません。
guest

0

Hashtableはオブジェクトを管理するものなので、プリミティブ型は使えません。
かわりにBooleanを使いましょう。

投稿2016/08/26 07:55

moonphase

総合スコア6621

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問