java, c# 追加失敗時の処理

このQ&Aのポイント
  • キーの重複時の追加処理について、javaとc#の違いや利用方法を検討しています。
  • javaとc#での重複キーの追加処理の違いや利便性について議論しています。
  • コレクションクラスにおけるキーの重複時の追加処理について、javaとc#のメソッドの使い方や利用価値について考察しています。
回答を見る
  • ベストアンサー

java, c# 追加失敗時の処理

 こんにちは。c#初心者兼、「java始めました」です。  プロパティ(文法)がなくて、わざわざget/setと括弧をつけないといけないし、finalつけないと勝手にオーバーライドされるかもだし、演算子定義できないし、ジェネリックは弱いし、…etcの代わりに、staticやfinalでやたらとインライン展開されて、凄いと感心している最中です。  さて、クラスのメソッド設計なのですが、クラスやメソッドのあり方についての質問です。  キーが一意にノード(値)と結びついているコレクションクラスを作成中なのですが、ちょっと問題発生です。  Setや、javaで言うMap、c#で言うDictionaryクラスには追加メソッド(addとかput)がありますが、その戻り値はvoid型(javaなら値の型もあるかな)が多いと思います。  そのため、キーが重複した際の処理はjavaは上書き、c#は例外(インデクサは上書き)となっており、一長一短です。  どちらの方式でも使用側が存在するかどうかのチェックを先に行えばよいのですが、使用側のコードが増えるし、どうせ今から作るクラスならもっと便利なものを作ろうという予定です。  用意する予定の追加関連のメソッドは、  (1)(c#風)追加を試み、成功時には生成されたノードを、キー重複の場合には例外をスローするメソッドadd(K key, V value) / Add(TKey key, TValue)、  (2)追加を試み、成功時には生成されたノードを、キー重複の場合にはnullを返すメソッドtryAdd(K key, V value) / TryAdd(TKey key, TValue)、  (3)(java風)追加を試み、キーが存在しない場合にはそのまま追加し、重複の場合は上書きし、どちらの場合も最後に生成されたノードを返すset(K key, V value) / Set(TKey key, TValue)、  (4)追加を試み、成功時には生成されたノードを、キー重複の場合には既存のノードを返すメソッドtryGetAdd(K key, V value) / TryGetAdd(TKey key, TValue)、  と、ここまでを振り返って思ったことですが、(2)のtryAdd/TryAddが(1)の(使用者側から見て)ほとんど上位互換になっているということです。  機能が酷似し、チェックの方法が異なるだけで、非常に特殊な場合では(2)はチェックなしでも安全に利用可能なので(1)の利用価値が希薄です((1)にはチェックを半強制させるという安全面でのメリットがないわけではないですが…)。  もちろん、addという分かりやすいメソッドがあったほうが安心する利用者はいると思いますし、インターフェイスの視点からもあった方がいいとおもいます。  それでもデフォルトで、一番使われそうなadd/Addメソッドがあまり使われないようなクラスというのはいかがなものなのでしょうか?  大丈夫ならそれでいいのですが、不自然、メソッドがややこしすぎる、などはないでしょうか?  どなたでも気づいたことがあればご指摘ください。

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

  • ベストアンサー
回答No.5

> しかし、javaのデフォルトのライブラリを使っていて驚いたことが、「例外のエラーメッセージとメソッ > ドのパラメータ名が一致しない」、「そのうえ、そんな値のパラメータを渡していない」、「そもそも、 > そんなパラメータ名の値を渡していない」ということです。 >  原因はおおよそ見当付いていますが…。 >  Addをそのまま使っていると、似たような混乱を生みかねないので、値を追加できなくて、”正しい(分 > かりやすい)”例外を出すためにTryAddを使おうという考えです。 なるほど、JDKのどのクラスのメソッドが該当するのか全く把握していませんが、 そんなのがあるんですね。 そういった正当な理由がある上で『あえて』捕捉するならば、パフォーマンス改善の 考え方も頷けますし、アリと思います。 が、きっとそれはライブラリなどのライブラリ・フレームワーク側が実装する方法であって、 それを利用して開発を行う側では、Add()、TryAdd()の利用用途が変わる場合もあると思いますよ。 (まあ、主にそれが実装スタイルの思想や要件によるでしょうけど)

koumei000
質問者

お礼

 遅くなりました。回答ありがとうございます。  (自作例外クラスがそこそこ改良できたので、リファクタリングに追われて、すっかり忘れていました)  そうですね。いろいろな使い方、考え方の人がいるのですから、それぞれのニーズに合ったクラス設計が大切ですよね。  お騒がせしました。この度はありがとうございました。

その他の回答 (4)

回答No.4

んと、恐らく思想によると思います。 私は 『意図して例外を発生させる』なら、try catchは使わない。 『意図していない時に例外を発生させる』なら、try catchを使う。 です。 上記思想の下に適切な命令方法を優先し、速度を最重要視することはしません。 例えば重複キーがないであろう前提、もしくは重複キーがある場合には 特別なエラーという挙動を考える時に、 try {  dictionary.Add(key, value); } catch (Exception e) {  throw new Exception("なんか固定のエラーメッセージ"); } みたいなことをしているならば、それはtry catchに頼るべきではなく、 ContainsKeyなどで検証します。(多少速度が遅かろうと関係ない) try catchは、想定外、他命令で捕捉不可能な場合のみ利用します。 if (dictionary.ContainsKey(key)) {  throw new Exception("なんか固定のエラーメッセージ"); } dictionary.Add(key, value); で、その流れの考えでいくと > if ( dictionary.TryAdd(key, value) == null ) >  throw new ~Exception(……); と、例外発生ではなく if ( dictionary.TryAdd(key, value) == null ) {  ~ なにか別な処理 ~ } 『なにか別な処理』が必要な場合にはこの記述でいいのではないでしょうか。 値が設定できなくて例外にするなら、TryAdd()をする必要ありませんよね。 いずれにしても、少なからず『Try』する必要がないロジックも存在します。 その時に『Try』するのは個人的にはナンセンスです。 C#で言ったら、絶対的にパースできると分かり切っているロジックに対しても いちいちint.TryParse()しているようなものなので。 速度ではなく、ロジックの見せ方と、例外の扱い方として。 色んな人のやり方があるわけですし、両方あっても別にいいのでは?

koumei000
質問者

お礼

 回答、ご指摘ありがとうございます。 > 色んな人のやり方があるわけですし、両方あっても別にいいのでは?  確かにその通りです。これは前述の通り納得・解決しました。  ちょっと、誤解がありそうなので補足。 > 『なにか別な処理』が必要な場合にはこの記述でいいのではないでしょうか。 > 値が設定できなくて例外にするなら、TryAdd()をする必要ありませんよね。  一般的にはその通りです。しかし、javaのデフォルトのライブラリを使っていて驚いたことが、「例外のエラーメッセージとメソッドのパラメータ名が一致しない」、「そのうえ、そんな値のパラメータを渡していない」、「そもそも、そんなパラメータ名の値を渡していない」ということです。  原因はおおよそ見当付いていますが…。  Addをそのまま使っていると、似たような混乱を生みかねないので、値を追加できなくて、”正しい(分かりやすい)”例外を出すためにTryAddを使おうという考えです。

回答No.3

> そのクラスでAddしたときに例外が出たときに、適切なエラーメッセージにならないことが多いので、 > TryAddを使うことが多いんですね。 >  try-catchならAddでもいいのですが、ちょとだけ行が増えるので敬遠気味です。 エラーメッセージなどの『例外ではない挙動』を必要とする処理をするならば try catchではなくContainsKey()などを利用すべきではないでしょうか。

koumei000
質問者

お礼

 再びの回答、ご指摘ありがとうございます。  確かに、 if ( dictionary.ContainsKey(key) )   throw new ~Exception(……); else Add(key, value);  などでも if ( dictionary.TryAdd(key, value) == null )   throw new ~Exception(……);  や、try-catchでAddを使うことの代用には動作的に十分だと思います。  ただし、これではContainsKeyと、Addで「一致するキーを探す」という処理を2回も行っています。  ご存知かと思いますが、たいていの場合、MapやDictionaryの「一致するキーを探す」処理が追加処理(時間)の大半を占めます(TreeMapなどで、回転を行う場合や、配列が一杯になって、コピーする場合もその限りではありませんが)。  そのため、if ContainsKey+Addの場合は2倍近い時間がかかり、わざわざ使おうという気がしません。  別にオーダーが変わっているわけではないので、if TryAddのコードの可読性が低いようならif ContainsKey+Addを使いますが、1行減&可読性はそんなに下がらないので後者の方が良いかなと。  さらに改善するならnullを static readonly Object Failed = null; (名前はKeyDuplicatedでもよい)  に変え、 if ( dictionary.TryAdd(key, value) == Failed )  とすれば十分、可読性は確保できると思います。

回答No.2

> それでもデフォルトで、一番使われそうなadd/Addメソッドがあまり使われないようなクラスというのはい > かがなものなのでしょうか? そんなことないと思いますけどね。 Add()は追加を前提とする場合の処理であって、TryAdd()は追加されない場面も少なからず存在します。 例えばAdd()で例外が発生する場合、この場合は、単純にコードが不正だから成り立つ事柄です。 これについては、『追加することを前提』としたコードを書いているわけですから、 例外が発生した方がベターであることは誰でもわかるでしょう。 それに対してTryAdd()でnullが返却される場合、別に不正でもなんでもないわけです。 コードでそういう動きが必要だからそうするわけですよね? (例えばある特定の条件化では既に事前にkey『ABC』が格納済みであり、それを何よりも優先 させることを前提で後続処理を行いたいなど) ↑ 個人的には、走行させるにも関わらず変化がないロジックを書くことは解析の手間上、好みませんが。 つまり、場面に応じてAdd()、TryAdd()を使い分けると思います。 場面を無視して常にTryAdd()を使用することは正直正しい選択とは思いません。 私ならむしろTryAdd()の方がほぼ利用しません。 (TryAdd()した結果を判定してどうのこうのしたい時くらいで、格納できなかった場合に 何もしないみたいなロジックは書かない。書いたら検証してる意味がない。) 何らかの潜在的な障害があった時、TryAdd()で書いてて、本来は値が書き換わってほしい、 もしくはそこで初めて値が入ると認識していた場合に誤動作を起こすわけですから、 そういう認識ならば、本来はAdd()で記述して例外が発生した方が正確でしょう。 だから、(2)があれば(1)は不要という結論には至りません。

koumei000
質問者

お礼

 回答ありがとうございます。  よくよく考えてみれば、長い間ライブラリ作りばっかりやってきたことが原因でしょうか?  終端部分であるアプリケーションのコードで使用されることより先に、自分が次(今)作るライブラリで使用することを想定して作って(質問して)いました。  そのため、他のクラスをDecoratorとして使うと、そのクラスでAddしたときに例外が出たときに、適切なエラーメッセージにならないことが多いので、TryAddを使うことが多いんですね。  try-catchならAddでもいいのですが、ちょとだけ行が増えるので敬遠気味です。  末端のアプリケーションなら、確かにAddの方が多いかもしれませんね。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

個人的には「キーの重複は『例外』なのか?」という疑問があるので, 今自分で作るなら (2) くらいかなぁ. ただ, これを全部作るとするともっとわかりやすい名前がほしい. 例えば, 「TryAdd」では (「try」とついている分だけ却って) 例外を送出するように感じるかもよ. ちなみに C++ の map::insert は (4)+α だったりする (「+α」は「既にあったかどうか」の情報も返すところ).

koumei000
質問者

お礼

 貴重なご意見ありがとうございます(ひょっとしたら久しぶりですかね)。  ちょっと誤解がありそうなので、補足しておきます。  Addは飽くまで「追加」で、Setを「関連付け(Associate)」としています。 > キーの重複は「例外」なのか  個人的な意見ですが、「追加」という操作に関しては間違いなく例外だと思います。  要素の個数はまったく増えませんから(イメージとしてはAddNew)。 > (「try」とついている分だけ却って)例外を送出するように感じる  ですが、これはc#の、  ・Dictionaryのboolean TryAdd(TKey key, out TValue)  ・int(Int32)のboolean TryParse(String s, out int)  のTry~をまねたものです。ArgumentNullExceptionくらいしかスローされません。 > c++のmap::insertは(4)+α  +αにするならoutキーワードがないので、専用のクラス(TrialResult<T> { T result; bool succeeded; })みたいなのが要りますね。 > もっとわかりやすい名前がほしい  こればかりは、何も言い逃れできませんね。もうちょい頑張ってみます。

関連するQ&A

  • C# HAPで属性を追加後、OuterText

    お世話になります。 立て続けで大変恐縮なのですが、 HtmlAgilityPackを用いて、特定のノードの AttributesにAddメソッドで追加した後、 OuterHtmlで吐き出すと、追加した属性の値が 必ず「"」でくくられますが、これを「'(シングル)」で くくって出力させる設定はありましたでしょうか。 最終的にReplaceしてしまえば構わないとは 思うのですが、かっこ悪いし、設定などでできるので あればと思い、質問いたしました。 メソッドか何かで、あれば教えてください。 なければ「ない」と教えてください。

  • Javaのプログラミングについてご指導お願いします。

    現在Javaを勉強しています。 このたび下記の実行結果となるように、次のソースにコードを追加しなくてはいけなくなったのですが、どうすればよいかわからずまったく手をつけることができません。 【ソース】 ・ Shopping.java class Shopping { public static void main(String args[]) { Fruit fruit; //下で生成するFruitクラス型オブジェクト名の定義 int price = 0; //商品検索結果(単価)を格納する変数 switch(args.length){ //コマンドライン引数の個数を判定 case 1: //コマンドライン引数が1つ(商品名のみ)の場合の処理を記述 //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* // Fruitクラスのオブジェクトを生成 // 商品検索(Fruitクラスのsearch()メソッドを実行) // 結果表示(Fruitクラスのdisplay ()メソッドを実行) case 2: // コマンドライン引数が2つの場合の処理を記述 //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* // Fruitクラスのオブジェクトを生成 // 商品検索(Fruitクラスのsearch()メソッドを実行) // 結果表示(Fruitクラスのdisplay ()メソッドを実行) default: // コマンドライン引数が1つ,2つ以外の場合の処理を記述 //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* // 引数の個数が違うエラーメッセージを表示する } } } ・ Fruit.java public class Fruit{ // インスタンス変数の定義 private String fName; //商品名 private int fNum; //個数 // 商品リストの登録(商品名、単価) String[][] fruittable = { {"Strawberry","500"},{"Apple","150"},{"Orange","100"}, {"Mango","1500"},{"Banana","200"},{"Peach","400"} }; // 商品名と個数を引数にもつコンストラクタの定義 //****** ここにコンストラクタの定義を追加します ********* //search()メソッド 単価を戻す int search(){ //search()メソッドの戻り値retval int retval = -1; //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* //商品リストにコマンドライン引数から入力した商品名と同じ商品名があるか検索し、 //見つかった場合は単価を戻す。見つからなかった場合は、-1を戻す。 } // display ()メソッド 引数として単価を受け取る void display(int price){ //****** 以下、コメントに対応するコードを追加し、処理を完成させます ********* // 商品名、単価、個数、合計金額を画面に表示する // 商品名が見つからなかった場合には、エラーメッセージを表示する } } 【実行結果】 ☆ 商品名と個数を入力すると、商品名、単価、個数、合計金額を表示する(個数が入力されない場合は1個とみなす) > java Shopping Orange 商品:Orange 単価:100円 個数:1個 合計:100円 > java Shopping Orange 3 商品:Orange 単価:100円 個数:3個 合計:300円 ☆ 商品が見つからなかった場合には、エラーメッセージを表示する > java Shopping Melon 3 Melonは商品ではありません。 ☆ 引数の数が0または3つ以上の場合は、エラーメッセージを表示する > java Shopping Orange Apple Peach 引数には商品名と個数を入力してください。 【条件】  (1) Shoppingクラスはmain()メソッドを持つ。  (2) 実行時の引数に商品名と個数を入力する。個数が入力されなかった場合は1とみなす。  (3) Fruitクラスのsearch()メソッドは、商品が存在するかどうかを検索するメソッドで、商品が存在した場合は単価を戻す。商品が見つからなかった場合には-1を戻す。  (4) Fruitクラスのdisplay ()メソッドは、商品名、単価、個数から合計金額を計算して表示するメソッドである。商品が登録されていない場合はメッセージを表示する。 Javaの先輩方に、どのようにコードを打てばよいのかご解説頂ければと思います。 恐れ入りますがよろしくお願いします。

  • エクセルVBAでDictionaryオブジェクトについて

    エクセル2000です。 教えてください。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_dictionary.html というサイトで  「myDic.Add Cells(i, 1).Value, Cells(i, 2).Value は   myDic(Cells(i, 1).Value) = Cells(i, 2).Value と書くこともできます。 」 という記述を見つけました。 試してみたところ Sub test01() Dim myDic As Object Dim myAr() Set myDic = CreateObject("Scripting.Dictionary") For i = 2 To 7 If Not myDic.exists(Cells(i, 1).Value) Then myDic.Add Cells(i, 1).Value, Cells(i, 2).Value End If Next i myAr() = myDic.Keys MsgBox Join(myAr()) End Sub Sub test02() Dim myDic As Object Dim myAr() Set myDic = CreateObject("Scripting.Dictionary") For i = 2 To 7 myDic(Cells(i, 1).Value) = Cells(i, 2).Value Next i myAr() = myDic.Keys MsgBox Join(myAr()) End Sub 上記2つのマクロは、Keyに関してはまったく同じ働きをするようです。 ところがItemに関しては、Keyが重複した場合、あとから出てきた方に上書きされるようです。 これはtest01では、Keyの重複を排除しているためItemは最初に出たものが残る、test02は重複の場合、無条件でKeyが上書きされ(ても値は変化しないけど)、したがってItemも上書きされるという理解でよろしいのでしょうか? ならば、Itemを気にしない場合、わざわざ If Not myDic.exists(Cells(i, 1).Value) Then myDic.Add Cells(i, 1).Value, Cells(i, 2).Value End If と、3行も費やして重複のチェックをしなくとも myDic(Cells(i, 1).Value) = Cells(i, 2).Value のわずか一行で済むということですよね?

  • Javaの課題が全くわかりません。

    この前学校からJavaの課題が出まして、全くわかりません。 <テストクラス>(ファイル名:Test.java) <フィールド> なし <メソッド> 1.メインメソッド 「ここからはテストクラスの流れを書きます」 ・アドレスサーチクラスを生成 ・アドレスサーチクラスのInitialize()メソッドを呼ぶ ・アドレスサーチクラスのSearchName()メソッドを呼ぶ ・検索結果を表示する <アドレスサーチクラス>(ファイル名:AddressSearch.java) <フィールド> 1.アドレス配列(3000個分) <メソッド> 2.住所録ファイル入力設定 (メソッド名) public void Initialize() 「ここからはテストクラスの流れを書きます」 ・住所録ファイルから1行目入力 ・1行を各項目に分解 ・アドレスクラスのインスタンスを生成 ・アドレスクラスのインスタンスに分解した各項目を設定 ・アドレス配列にインスタンスを格納 3.氏名検索 (メソッド名) public Address SearchName(String name) 「ここからはテストクラスの流れを書きます」 ・アドレス配列から氏名を探す ・一致した氏名のインスタンスを戻す  一致しない場合、nullを返す 長くなりました。このような条件でプログラムを作るのは私にはあまりわかりませんでした。googleなどで検索してもあまり良い情報がありません。もしこの問題が解ける方がいらっしゃるなら、ぜひアドバイスやプログラムなどを教えてくれたらありがたいです。

  • ツリービューの使い方が・・・

    VBのカスタムコントロールはほとんどさわったことがないので、ぜんぜんわからないです。 初心者っぽい質問で申し訳ないのですが、プロセスとプロセスがもっているスレッドを、プロセスID&スレッドIDをキーにツリー構造を持たせたいのですが、ツリービューのツリーへのアクセスのしかたがわかりません。 MSDNライブラリが壊れているようで、ヘルプが出ないのです。 新しいMSDNライブラリ入れてから、トラブル続き。 TreeView1.Nodes.Add , , "キー", "値" TreeView1.Nodes.Add , , "キー\サブキー", "値" じゃなさそうみたいです。 かといってそれぞれのノードが小枝への参照をもっているわけでもないし、小枝を追加するメソッドをもっているわけでもないし。 単純に小枝への追加のしかたが知りたいだけなんですけど・・・。 だれか教えてください。

  • java アプリケーションをjava アプレットに

    java超初学者です。詳しいかたご教授願います。 java アプリケーションをjava アプレットに書き換えたいのですが、具体的にはどう書き換えを行ったらいいのか修正をお願いします。 (文字制限があるので、14個あるクラスファイルの中で(内1つはhtmlファイル)、メインメソッドを持つ実行クラスだけのせています。) Appletを継承させる、属性をメインクラスとコンストラクタはpublic にする、 mainメソッドを削除し、initメソッドへ書き換える、サイズ指定は<applet>タグで指定する。等調べましたが 具体的にわかりません。特にコンストラクタとメインメソッドの部分のアプレットへの書き換えがわかりませんでした。 宜しくお願い致します。 //実行クラスです。 import java.awt.*; import java.awt.event.*; /** *ゲームクラス(ここから始まる)<p> *画面の作成 */ public class Game extends Frame { /** * メインクラス */ public static void main(String args[]) { //フレームの作成 new Game(); } /** * 引数なしのコンストラクタ */ Game() { //*** ウィンドウの初期化 //タイトル super("Shooting Game"); //クローズボタンによる終了処理の実装 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent evt) { System.exit(0); } }); setSize(500, 500); //ウィンドウのサイズ //*** キャンバスの初期化 MyCanvas mc = new MyCanvas(); add(mc); //フレームにキャンバスを追加 setVisible(true); //ウィンドウの表示 //ゲームデータの初期化 mc.init(); //スレッドを作成 mc.initThread(); } }

  • 住所の追加について

    AddressFileクラスに記録されているハッシュの内容に、新たに名前とメールアドレスを追加するメソッドaddをAddressFileクラスのメソッドとして定義したいんですが、def add以降の作り方がわかりません。 どのように作成したらいいか、教えてください! お願いします。 ○が名前で、△が住所になります。 class AddressFile def initialize(file) @original = file @meibo = {} fo = open("address_list.txt", "r") lines = fo.readlines fo.close for aLine in lines data = aLine.split @meibo[data[0]] = data[1] end end attr_accessor :meibo def search(name) @meibo[name] end def add(name,address) end end obj = AddressFile.new("address_list.txt") obj.add("○○○○", "△△△△") obj.search("○○○○") obj.search("○○○○") obj.search("○○○○") 初心者で申し訳ないですが、お願いします。

    • ベストアンサー
    • Ruby
  • ComboBoxのItem追加

    VB.NETでの開発初心者です。 ComboBoxのItem追加について、1行づつ追加していくのは理解できているのですが、HTMLでのListBox「OPTIONS設定」の様にArrayListにて一括追加する方法がわかりません。 ご存知の方、よろしくお願いします。  <1行づつ追加>  Me.ComboBox1.Items.Clear()  Me.ComboBox1.Items.Add(New ComboItems(Key値, 表示値))    ※ComboItemsクラスは、別途作成 <一括追加>  Dim comboArray As New ArrayList  comboArray.Add(New ComboItems(Key値, 表示値))  Me.ComboBox1.Items.???(comboArray) ← ここがわからない  

  • Javaで単方向リスト作成に行き詰まり

    Javaで単方向リストを作成しようとしているのですが、append()で1件目のvalueやnextの値をアクセスするにはどうしたらいいか分かりません。ちなみにmain関数は変更しなくていいようです。 class Chain{ public static void main(String args[]){ //1件目のノードの作成 if(args.length == 0){ System.out.println("パラメータを指定してください"); return; } Node start = new Node(Integer.parseInt(args[0])); //2件目のノード作成 for(int i = 1; i < args.length; i++){ start.append(Integer.parseInt(args[i])); } } } class Node{ //メンバ変数(インスタンス変数) private int value; private Node next; //コンストラクタ public Node(int value, Node next){ this.value = value; this.next = next; } public Node(int value){ this.value = value; } public Node(){ this.value = 0; this.next = null; } //アクセスメソッド(setter, getter) public int getValue(){ return value; } public void setValue(int value){ this.value = value; } public Node getNext(){ return next; } public void setNext(Node n){ this.next = n; } //通常のメソッド //追加する public void append(int v){ Node chain = new Node(); chain.value=chain.getValue(); System.out.println(chain.value); } }

    • ベストアンサー
    • Java
  • MozillaでIE6のエクスポートしたbookmark.htmをインポートすると上書きでなく、追加されてしまう

    Win2kでMozilla 1.7aを使用しています。 このMozillaでIE6のエクスポートしたbookmark.htmをインポートすると上書きでなく、追加されてしまい、 同じリンクが重複して存在して、最近はインポート毎に増えすぎたリンクにうっとおしくて困っています。 インポート時に追加ではなく、上書きされるようにするにはどうすればいいのでしょうか?