• ベストアンサー

Enumのname()とtoString()の違いについて

J2SE5.0から追加されたEnumを使ってみようと勉強中です。 Enumの要素の識別名を取得するためのメソッドとしてname()とtoString()の2つがありますが、違いは何なのでしょうか? APIドキュメントによると『name()よりtoString()を使う方がいい』というようなことが書かれていますが、その理由がわかりません。 同じくAPIドキュメントに『toString()はユーザフレンドリな値を返す』という記述があって、これの意味もよくわからず悩んでいます。。。 どなたか、ご教授ください。 よろしくお願いいたします。

  • Java
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>カスタマイズされている可能性があるのでtoString()を呼んだ方がいいということですね。 そうですね。 素のままでは、同じですけど、よりわかりやすいような表現を得る可能性があるということですね。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

APIドキュメントを読んでみましたが、 toString()は、オーバーライドできるので、カスタマイズ(ユーザーフレンドリ)できるという意味合いだと思います。 name()はfinal宣言されているのでオーバーライドすることはできません

LunaRossa
質問者

お礼

ご回答ありがとうございます。 カスタマイズされている可能性があるのでtoString()を呼んだ方がいいということですね。 納得です。

関連するQ&A

  • enum型

    お世話になります。 Javaのenum型に関してお聞きしたいです。 JavaのAPIドキュメントを見ると、enumのvalueOfメソッドに関して、 以下のように記述がありますが、具体的にどのように使用するので しょうか? public static <T extends Enum<T>> T      valueOf(Class<T> enumType,String name) どうかよろしくお願いします。

  • JDK1.5のjava.math.BigDecimal#toString

    JDK1.5のjava.math.BigDecimal#toStringについて教えて下さい。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/math/BigDecimal.html#toString() SunにDocumentがありますが、この説明にある「調整された指数」の算出の仕方がよくわからないので、どういうときに指数表示されるのかが分かりません。 例を示してわかりやすく説明していただけるとありがたいです。

  • javaによるenum型の扱い

    最近javaに親しんできたのですが、 Cとjavaにおける列挙型の扱いの違いに困っています。 javaにおけるenumはクラスであり、 各要素にメソッドを追加できることは分かったのですが…… 例えば、Cにおけるenumは確か、 typedef enum{EAST,SOUTH,WEST,NORTH} dirT; //定義 -------- (略) -------- dirT dir=EAST; //宣言・dirに要素EASTを格納 というようなことが出来たと思いますが、 javaはenumもクラスで、さらにnewでメモリ確保できないと聞きました。 つまり、このように列挙型の保持はできないということになるのでしょうか。 結局やりたいこととしては、このように「保持してある」列挙型に対して 条件分岐処理をしたいと考えています。 説明が上手くできず伝わりにくいかと思いますが、 どうか回答をお願いいたします。

    • ベストアンサー
    • Java
  • HTMLでのid とnameの違い

    HTMLとJavaScriptを使ってWebページを作っていますが、 id と name の使い分け方がよくわかりません。 id は各エレメントに個別に与える識別子と認識していて、getElementById() メソッドなどでよく使うのですが、それと name プロパティーはどう違うのでしょうか? あるサンプルコードに次のようなものがありました。 <a href="http://www.google.com" name="google_link"> <img src="google.gif" id="engine-1" alt="google graphic"> </a> というHTML部分があり、しばらく後に function show_attribs() { var attribs=""; attribs += "Link name: " + window.document.getElementById("engine-1").name; ..... alert(attribs); } というJavaScriptの関数があり、結果としてアラートボックスに  Link name: google_link と表示されるものです。 よくわからないのは、"engine-1" という id で取得した <img> エレメントが、 <a> エレメントに設定したはずの name プロパティー とその値を持っているということです。なんだか二つのエレメントが一体になったように扱われていますが、なぜそうなるのかわかりません。 どなたかよく説明していただけないでしょうか。お願いします。

    • ベストアンサー
    • HTML
  • アンダーバーのname値は取得できないでしょうか?

    Javascriptのname値にアンダーバーは付けない方が 良いのでしょうか? 又、使用した場合、name値を取得する方法はありますか? 値を取得できない例 alert(document.frm1.day_flg.value); 値を取得できる例 alert(document.frm1.dayflg.value); <form name="frm1"> <input type="radio" name="day_flg" value="1" checked> <input type="radio" name="dayflg" value="1" checked> </from>

  • enumでの要素番号から要素名の取得方法

    こんにちは. java初心者です. 列挙型について勉強しています. 列挙型の中にファイル名を紐付けて利用したいと考えています. 要素名から要素番号を取得する方法はordinal()で出来ますが, その逆で,要素番号から要素名を取得する方法が調べても分かりませんでした. 具体的には,以下のソースで乱数を発生させ,その番号の要素名を取得する方法が知りたいです. よろしくお願いします. =========================== import java.util.Random; public class Sample { // 列挙型 enum Color{ RED("data1.txt"), BLUE("data2.txt"), GREEN("data3.txt"), NUM(""); private String name; Color(String name){ this.name = name; } public String getName(){ return name; } } public static void main(String args[]){ for(int i=0;i<10;i++){ Random rnd = new Random(); int id = rnd.nextInt(Color.NUM.ordinal()); // ランダム Color c = null; System.out.println("要素番号" + id + "の要素名は" /* + Colorのid番目の要素名 */ + "ファイル名は" + c.getName() + "です"); } } } ===========================

    • ベストアンサー
    • Java
  • C#でユーザコントロールのプロパティを選択式にしたい

    こんにちは、いつも拝見して参考にさせて頂いています。 今回、C#を使用して、ComboBoxを使用したユーザコントロールを 作成しようとしております。 作成するユーザコントロールにプロパティを追加することまでは わかったのですが、追加するプロパティを選択式にしたいと 思っています。 StringConverterを使用して、文字列の選択をすることまでは できたのですが、Enum型の値を使用してプロパティを選択式 にすることはできないでしょうか。 Enum型で選択式にしておき、選択されたEnum型の値をプロパティ から取得して、処理分岐をしたいと考えています。 ご存知の方がいらっしゃいましたら、ご教授お願いします。

  • 配列変数のlengthプロパティは、どうしてそのまま参照できるのですか?

    Javaの基礎を学んでいるのですが、ちょっと仕様に疑問があるのでお伺いしたいと思います。 昔、カプセル化について教わった事があったのですが、それによると、オブジェクトの持つ属性(プロパティ、フィールド)は、操作(振る舞い、メソッド)を介してアクセス出来るというのが望ましいはずです。 でも、例えばmainメソッドのコマンドライン引数であるargsという変数は、配列変数です。lengthというプロパティで要素の数を取り出せます。 lengthはプロパティであり、もちろんメソッドじゃないです。 どうしてわざわざこんな仕様になっているのでしょうか? J2SEのAPI仕様書が以下のURLにありましたので、ちょっと調べてみました。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html それによると、Arrayクラスなどは、ちゃんとgetLengthメソッド等を使用しています。 何か理由があったのだと思うのですが、予想がつきません。 どなたかご存じないでしょうか?

  • nameに「:」があるとスクリプトエラーになる

    JavaScriptを使って Selectボックスに値を追加しようとしています。 しかし、Selectボックスのnameに「:」があると スクリプトエラーが発生してしまいます。。。 nameを変えずに、スクリプトエラーを回避する方法 をご存知の方、ご教授下さい。 よろしくお願いします。 例------------------------------------------- <html> <head> <title>tset</title> <SCRIPT LANGUAGE="Javascript"> <!-- function addList(){ var oAdd = document.createElement("OPTION"); oAdd.text = "test" document.fm.aaa:bbb.add(oAdd); } // --> </SCRIPT> </head> <body> <form name="fm"> <select name="aaa:bbb"> </select> <input type="button" name="btn" value="add" onClick="javascript:addList()"> </form> </body> </html>

  • domについていまいちわからないので教えていただきたいのですが

    <link rel="stylesheet" href="default.css" type="text/css" /> 例えばこのタグで rel要素のstylesheetという値を取得したいのですが webbrowser1.document.getelementsByTagname("link") の後にどのように記述すれば取得できるのでしょうか?教えてください。お願いします。