【初心者】Java質問・相談スレッド103【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/06/27(水) 07:23:27JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/
過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
【初心者】Java質問・相談スレッド102【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1180419689/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
次スレは>>980あたりで。
0696デフォルトの名無しさん
2007/07/17(火) 14:52:440697デフォルトの名無しさん
2007/07/17(火) 15:32:49つ速読の練習
0698デフォルトの名無しさん
2007/07/17(火) 15:34:493000〜1万行くらい?
0699デフォルトの名無しさん
2007/07/17(火) 15:44:050700デフォルトの名無しさん
2007/07/17(火) 17:32:52「スレ立てるまでもない質問はここで」スレの過去ログを
いくつか見てみたけど、だいたい1スレ7000行弱に収まってるね。
ってことは10万行つったら15スレ分ぐらい、
それを一気に表示されたって使う方は困るし、それよりは
うまく分割するとか有益な情報を抽出するとかって方に
注力した方が得るものは大きいと思う。
0701デフォルトの名無しさん
2007/07/17(火) 17:42:37送り込めるようにするのがいいと思う。
但し、どうしても必要な場合に限定し、できうる限り整理されたデータを用いるべき。
0702デフォルトの名無しさん
2007/07/17(火) 19:21:450703デフォルトの名無しさん
2007/07/17(火) 19:47:51import java.awt.*;
import javax.swing.*;
public class J688 extends JFrame{
JTextArea textArea = new JTextArea(10*10000, 40);
JScrollPane scrollPane = new JScrollPane(textArea);
public J688(){
super();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for(int i=1;i<=textArea.getRows();++i) textArea.append("Line:"+i+"\n");
add(scrollPane, BorderLayout.CENTER);
setPreferredSize(new Dimension(300, 300));
pack();
setVisible(true);
}
public static void main(String[] args) {
new J688();
}
}
0704デフォルトの名無しさん
2007/07/17(火) 22:09:22標準入力でインスタンスの数が変わる場合、インスタンスの生成で
インスタンス名をどう指定すればいいんでしょう?
Player player1 = new Player;
と言う感じに固定ならば書きますが、このplayer1が可変な場合に
変数などでどう表せば良いのかでつまづいて…。
0705デフォルトの名無しさん
2007/07/17(火) 22:11:19そこんとこもう少し詳しく
0706デフォルトの名無しさん
2007/07/17(火) 22:16:08System.inで読んだ内容からk個のインスタンスを作るんだったら
普通にk個インスタンスを生成して片っ端からListに入れればいいんじゃね?
0707デフォルトの名無しさん
2007/07/17(火) 22:20:19ってパパが言ってた。
0708デフォルトの名無しさん
2007/07/17(火) 22:29:48質問させてください
現在修行中の身で、JavaSE5.0を使って色々とOJTしております
XMLを扱う場面で先輩からJAXB2.0なる便利なものを教えていただきました。
途中からJavaSE6に変えてJAXB2.0を楽しんでいたのですが、会社の命令でJavaSE6禁止命令が出ました(出ましたというより、もともと5.0か1.4しか使っちゃだめらしいです)
そこで困っているのですが、またまた、先輩社員からJavaSE5.0使って、SE6のJAXB2.0だけコピーすりゃいいじゃんと言われました
そんなことできるんですか?
0709704
2007/07/17(火) 22:35:09早速どうもです
何と言うか、インスタンスの数が2つと決まっていれば
Player player1 = new Player;
Player player2 = new Player;
と言う感じに2つ作れば出来ますが、標準入力で指定された数作ろうとした場合
下みたいな感じで配列なりで表してfor文ででも回せば良いかと思ったのですが。
m = 標準入力;
for(int n = 0 ; n>=m ; n++ ){
Player **** = new player;
}
ここの***をどう記述したら良いのかが分からずどうにもうまく行かなくて。
初心者で引数可変、Listがちょっと分かりませんが調べてみます。
0710デフォルトの名無しさん
2007/07/17(火) 22:56:07JAXB自体はJavaSE6以前からある。ここね。
ttps://jaxb.dev.java.net/
ここからダウンロードしたファイルからjar取ってきて、クラスパスに足せばいいよ。
「SE6のJAXBだけコピー」と言われると違うが、お前さんの解釈違いの可能性もあるので
その先輩さんのことはとやかく言わないでおく。
0711デフォルトの名無しさん
2007/07/17(火) 23:04:44いや、そんな事したらライセンスとライブラリの依存関係解決を別個にやる羽目になるじゃん。
JAXBのページがsunかその周辺のサーバーにホストされてるからそこ当たってみ。
>SE6のJAXB2.0だけコピーすりゃいいじゃん
ライセンス管理意識なさ過ぎ。
0712デフォルトの名無しさん
2007/07/17(火) 23:13:36少し前に下記のようなコードを書いてプログラムを走らせたところ、出力ファイルの末尾が切れていました。
String output_file_str = "hoge.txt";
FileWriter output_file = new FileWriter(output_file_str);
BufferedWriter output_file_buf = new BufferedWriter(output_file);
/* 出力処理 */
output_file_buf.close();
output_file.close();
調べた結果、close()する前にflush()をしなければいけないということが分かったので、下記のように直して現状は正しく動作しています。
String output_file_str = "hoge.txt";
FileWriter output_file = new FileWriter(output_file_str);
BufferedWriter output_file_buf = new BufferedWriter(output_file);
/* 出力処理 */
output_file_buf.flush();
output_file_buf.close();
output_file.close();
0713712
2007/07/17(火) 23:14:20ここで、ふと疑問に思ったのが、FileWriterとBufferedWriterの両方にflushが存在している点で、
FileWriterは一文字単位でしかやり取りできない、BufferedWriterを使うことで行単位などでもやり取りができるということから
【BufferedWriter】−【FileWriter】−【ファイル】
とつながっていると思うのですが、この場合
output_file_buf.flush(); /* BufferedWriterの内容をすべてFileWriterにflush()する */
output_file_buf.close(); /* BufferedWriterの中身はすべて出力済みなので閉じてOK */
output_file.flush(); /* FileWriterの内容をすべて指定したファイルにflush()する */
output_file.close(); /* FileWriterの中身はすべて出力済みなので閉じてOK */
と両方でflushすべきなのかどうかで迷っています。
いくつかのページを参考に調べてみると、
String output_file_str = "hoge.txt";
BufferedWriter output_file_buf = new BufferedWriter(new FileWriter(output_file_str));
/* 出力処理 */
output_file_buf.flush();
output_file_buf.close();
といった感じにひとつずつ変数を定義するのではなくまとめて書かれていたのですが、FileWriterを明示的にflushしなくても安全なのでしょうか?
以上です。どなたかアドバイスよろしくお願いします。
0714デフォルトの名無しさん
2007/07/17(火) 23:19:03> 調べた結果、close()する前にflush()をしなければいけないということが分かったので
それは嘘。close() する前に flush() する必要はない。
0715デフォルトの名無しさん
2007/07/17(火) 23:42:06レスさんくすです
先輩のアドバイスは私の解釈違いかも知れないのでスルーしてください
JAXBはSE6以前からあったんですね
SE6で標準APIに加えられたとの解釈でOKですかね?
0716712
2007/07/18(水) 00:05:20表現が少しあいまいでした。
正確には研究室の先生に出力が途切れる現象を伝えたところ、flush()すれば大丈夫との回答が得られ、実際にflush()の行を追加したところ、すべてが出力されたという状態です。
BufferedWriterのjavadocでは
flush
public void flush()
throws IOExceptionストリームをフラッシュします。
定義:
クラス Writer 内の flush
例外:
IOException - 入出力エラーが発生した場合
--------------------------------------------------------------------------------
close
public void close()
throws IOExceptionストリームを閉じます。
定義:
クラス Writer 内の close
例外:
IOException - 入出力エラーが発生した場合
とあって、closeが内部でflushを行ってからストリームを閉じるとは書いてはないので、実は明示的に行わないとまずいのではと思ったのですが・・・
でもいくつかのページではcloseはflushを行った後にストリームを閉じるって書いてあって、でも各ページの説明で使っているサンプルコードにはちゃんとcloseの前にflushが入っているわけで・・・
初めに出力されなかった問題点はもっと別のところにあるのかな?
0717デフォルトの名無しさん
2007/07/18(水) 00:10:38配列作って pl[n]
それから、「new Player;」 「n >= m」 は間違ってるから修正しとき
0718デフォルトの名無しさん
2007/07/18(水) 00:33:531.6 のAPIリファレンスでは
>ストリームを最初にフラッシュして、閉じます。
って書いてある。
たぶん、あまりにも当然すぎて書かれなかっただけなんじゃないかと。
> 初めに出力されなかった問題点はもっと別のところにあるのかな?
output_file_buf.close() を呼ぶ前に
output_file.close() を呼んでいた、に一票。
0719デフォルトの名無しさん
2007/07/18(水) 02:42:29そう。EE5.0にあるxmlライブラリをSEに持ってきた時に依存関係を解決するついでにくっついて来た感じ。
標準ライブラリに昇格しただけでJAXB自体は前からあった。
0720デフォルトの名無しさん
2007/07/18(水) 03:53:120721デフォルトの名無しさん
2007/07/18(水) 03:58:290722デフォルトの名無しさん
2007/07/18(水) 05:19:420723デフォルトの名無しさん
2007/07/18(水) 09:59:11以下のような処理を行いたいと思ってるのですが、行き詰まっています。
1. JScrollPaneのscrollble clientに、GridBagLayoutのJPanelを貼り付けて、ボタンの
テーブルを作成。
2. JScrollPaneのcolumn headerに、JTableのcolumnNamesのような項目名をテーブルの
各要素の幅に同期するように作成。
上記の、2.の処理を上手くやる方法はないでしょうか?
最初は、JTableのセルにパネルを貼り付けられないかと考えていたのですが、探した限り
やり方がみつからなかったので、この方法をとろうとしています。
良いお知恵をお持ちの方、ご教示願います。
0724デフォルトの名無しさん
2007/07/18(水) 10:28:34>やり方がみつからなかったので、この方法をとろうとしています。
TableCellRenderer
0725デフォルトの名無しさん
2007/07/18(水) 10:46:520726デフォルトの名無しさん
2007/07/18(水) 12:06:380727712
2007/07/18(水) 15:25:28言われてみて、はっと気がついてソースコード見直したら
/* バッファーの内容を全て吐き出す */
buf_output_file.flush();
/* ファイルクローズ */
output_file.close();
ってなってました・・・
すみませんでした〜〜〜(>_<)
Javaで本格的に書き始めたのが、今回エラーの出たソースコードで、最近第2作目に突入していて頭の中がごっちゃになってました。^^;
0728デフォルトの名無しさん
2007/07/18(水) 18:08:40これをShift-JISでの文字コードを取得するにはどうしたらいいですか?
0729デフォルトの名無しさん
2007/07/18(水) 18:54:30出来ません。
CharacterやStringクラスにコードポイントを返すメソッドがあるのでそれを使いましょう。
今のunicodeは21bitなんだな
0730デフォルトの名無しさん
2007/07/18(水) 19:03:00char型の変数cに収まる範囲の文字コードについてはいい加減にこういうふうに
char c = 'あ';
short s = java.nio.charset.Charset.forName("Shift_JIS").encode(String.valueOf(c)).getShort();
System.out.printf("%04x%n", (int)c);
System.out.printf("%04x%n", s);
0731デフォルトの名無しさん
2007/07/18(水) 19:15:44Charsetまで呼ばなくても、それならこれでいいんじゃね?
for (byte b : String.valueOf(c).getBytes("Shift_JIS")) System.out.printf("%02x", b);
0732デフォルトの名無しさん
2007/07/18(水) 21:44:44急いで書いたらしょうもないミスしてますね、すいません。
配列で出来るんですか…う、う…ん…。
何か根本的にやり方がおかしいようですね…。
勉強しなおしてきます。
0733デフォルトの名無しさん
2007/07/18(水) 22:47:44大量データがある場合はパフォーマンスとリソースの観点から実用的では無い
ので、JScrollBar を使用した手動スクロールを作成したいのですが、
作成方法を教えて頂けませんでしょうか?
サンプルなどがあるHPでも結構ですので、ご教授頂けると幸いです。
0734デフォルトの名無しさん
2007/07/18(水) 22:57:280735デフォルトの名無しさん
2007/07/18(水) 23:01:210736デフォルトの名無しさん
2007/07/18(水) 23:10:52> 大量データがある場合はパフォーマンスとリソースの観点から実用的では無い
JScrollPane使ってたら、描画が必要な部分しか描画しないはずだが。
0737デフォルトの名無しさん
2007/07/18(水) 23:12:340738デフォルトの名無しさん
2007/07/18(水) 23:19:24Swingの使い方間違えてんだろう・・・Swingで著しくパフォーマンス悪いのと描画に問題あるのは昔からマが使い方間違えてるだけだし。
JTreeを初期化時に全部ツリー作るとかさ。
そういうことだ>>733ソース晒すなりしないと。
今のマシンスペックじゃあブラウザでFlash自慰サイト読み込んで
メモリ1Gくらい食ってガンガン動かしても余裕だからjavaなんて論外。
0739デフォルトの名無しさん
2007/07/18(水) 23:46:53try {
while (true) {
Socket acceptedSocket = serverSocket.accept();
hogehoge(acceptedSocket);
}
} catch (InterruptedException e) {
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
他のスレッドからThread#interrupt()で止められるサーバーってこう書くのかと思ったら
例外 java.lang.InterruptedException は対応する try 文の本体ではスローされません。
正しくはどう書くものなんでしょうか。
0740デフォルトの名無しさん
2007/07/18(水) 23:47:08Flexっていう便利なものがあるんだからJavaでGUI書くなんて
論外って意味なのか、Javaで書くと重いと文句を言うなんて
(使い方を間違えてるだけから)論外って話なのか、どっちだろう
0741デフォルトの名無しさん
2007/07/19(木) 00:36:26Thread#isInterrupted()、Thread#interrupted() 使って
自前で割り込みされたかチェック。
何したいのか良く分からんけど、
interrupt で止められるサーバって考え方自体が正しくないような気もするが。
0742デフォルトの名無しさん
2007/07/19(木) 00:47:41ここでその手の話にまったく詳しくない俺が本で読んだだけの知識で答えるぜ
1.ServerSocket#accept()はInterruptExceptionを投げない→タイムアウトを使うしかないはず(nioあたりで止められるのはあった気がする)
2.Thread#interrupt()を実行したら勝手にInterruptExceptionが発行されるわけではない→Thread.currentThread().isInterrupted()でインタラプト状態を確認し手動で投げる
3.hogehogeがやたら時間のかかる処理でInterruptExceptionを使う場合hogehoge内で2の動作をすることでキャンセル可
0743739
2007/07/19(木) 01:12:45・・・が、方針の段階で間違っているんですかね・・・。
サーバーって普通どう止めるものなんでしょう?
0744デフォルトの名無しさん
2007/07/19(木) 01:40:360745デフォルトの名無しさん
2007/07/19(木) 10:31:20class Fuck
{
String str[] = new String[5];
public static void main(String[] args)
{
}
}
ってやると配列の宣言でエラーがでるんですが何故でしょうか?
配列の宣言文をメインの中でやるとエラーはでないんですが
0746デフォルトの名無しさん
2007/07/19(木) 10:35:460747745
2007/07/19(木) 10:46:32class fuckArr
{
static String str[] = new String[5];
str[0] = "myGOD";
public static void main(String[] args)
{
System.out.println(str[0]);
}
}
で
fuckArr.java:4: ']' がありません。
str[0] = "myGOD";
^
fuckArr.java:4: <identifier> がありません。
str[0] = "myGOD";
ってエラーがでるんですが何故でしょうか?
mainでstr[0] = "myGOD";ってやると通るのですが
0748デフォルトの名無しさん
2007/07/19(木) 10:46:41配列の宣言(String str[] = new String[5];ってやってるところ)では エラーでないでしょ。
staticメソッドからは static でないメンバにアクセスできないけど。
0749デフォルトの名無しさん
2007/07/19(木) 10:51:08そこには式文かけないから当たり前。
フィールド宣言時に初期化子つかってやるか、静的初期化子使え。
static String[] str = { "myGOD", null, null, null, null };
static String[] str = new String[]{ "myGOD", null, null, null, null };
static String[] str = new String[5];
static { str[0] = "myGOD"; }
0750デフォルトの名無しさん
2007/07/19(木) 10:52:110751デフォルトの名無しさん
2007/07/19(木) 10:52:42{
static String str[] = new String[5];
str[0] = new String("myGOD");
public static void main(String[] args)
{
System.out.println(str[0]);
}
}
0752デフォルトの名無しさん
2007/07/19(木) 10:54:30str[0] = "myGOD";がある場所はコンストラクタやフィールド、メソッド、内部クラスの定義しか書けない場所。
0753745
2007/07/19(木) 11:08:51レスthx
単純に式文がかけない場所なんですね
0754デフォルトの名無しさん
2007/07/19(木) 13:54:28例えばページ上でボタンを押したら録音が始まり10秒間録音してユーザーのローカルにファイルとして保存するようなJSPは
構築可能でしょうか?
頭でなかなかイメージできないので、可能か不可能かも分かりません
具体的な解説を付け加えてもらえれば、なお助かります
0755デフォルトの名無しさん
2007/07/19(木) 14:05:410756デフォルトの名無しさん
2007/07/19(木) 14:20:30無理というかJSPにする意味が分からんというか。
そういうのはJWSにした方が良いよ。
0757デフォルトの名無しさん
2007/07/19(木) 14:37:26JWSとJSPはサーバサイドかクライアントサイドかの差だけだと思っていたので、
サーバ側の自分が負担できればと思っていたのですが・・・
またもしJSPであれば、クライアント側はJRE等が必要なくて済むかと・・・
つまり先述の例であれば、JWSの方が良い理由があるということでしょうか?
0758デフォルトの名無しさん
2007/07/19(木) 14:53:09サーバにくっついてるマイクの音だけしか拾えない。
0759デフォルトの名無しさん
2007/07/19(木) 14:55:580760デフォルトの名無しさん
2007/07/19(木) 15:06:23サーバー側で動くもの作ったことある?
というかどういう風に動いてるか知ってる?
根本的なところから勉強した方が良い気がする。
0761デフォルトの名無しさん
2007/07/19(木) 15:07:03Javaに限らずそれはしたほうがいい
0762デフォルトの名無しさん
2007/07/19(木) 15:37:590763デフォルトの名無しさん
2007/07/19(木) 15:39:19だからそれほど難しい話ではない
0764デフォルトの名無しさん
2007/07/19(木) 15:44:09ありがとうございます。
ちなみにビギナー向けでいい本ご存知ですか?
0765デフォルトの名無しさん
2007/07/19(木) 15:55:10アルゴリズムの勉強は言語(Javaでもいい)の基礎が出来ていて多少書けることが前提
「アルゴリズム」とか「データ構造」でぐぐればネットでも勉強できる
これはC言語だけどアルゴリズムの考え方自体は同じだから参考になると思う
http://www.geocities.jp/ky_webid/algorithm/index.html
Javaで説明されてる本も出版されてるみたいだけど読んだことは無い
0766デフォルトの名無しさん
2007/07/19(木) 16:08:57そうですか。自分はJavaの勉強に行き詰っている状態なのでちょっと厳しいかもしれません
ネットでも勉強出来るんですね?ありがとうございました
0767デフォルトの名無しさん
2007/07/19(木) 16:22:07ネットで見たりするソースに隠れたものを理解できるようになる
そうなるとどんどん力が付くよ。
最初はやはり本で少し学んだ方がいいかもしれない
それほど高く無い値段で出回ってる。
0768デフォルトの名無しさん
2007/07/19(木) 16:35:37俺:newってどういう意味?
部下:
____
/ \ /\ キリッ
. / (ー) (ー)\
/ ⌒(__人__)⌒ \ あたらしく作るということです
| |r┬-| |
\ `ー'´ /
ノ \
/´ ヽ
| l \
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、.
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
俺:newって単語の意味だけで想像して言っただろ?
部下:はい(´Д`;)ヾ
0769デフォルトの名無しさん
2007/07/19(木) 17:00:110770デフォルトの名無しさん
2007/07/19(木) 17:03:28フヒヒ 横からいいHPハケーン!
0771デフォルトの名無しさん
2007/07/19(木) 17:50:23クライアント側のミキサーにアクセスしようとしてるんだと思うが?
0772デフォルトの名無しさん
2007/07/19(木) 17:58:17難しく考えすぎ
0773デフォルトの名無しさん
2007/07/19(木) 18:16:190774755
2007/07/19(木) 19:00:250775デフォルトの名無しさん
2007/07/19(木) 19:03:44そのあと保存
0776デフォルトの名無しさん
2007/07/19(木) 19:04:450777デフォルトの名無しさん
2007/07/19(木) 20:23:58正規表現を指定してそれにマッチする文字列をランダムで作成する、みたいなことってできないでしょうか。
仕事なんでできないとだめなんですが、ご意見いただけないでしょうか。
0778デフォルトの名無しさん
2007/07/19(木) 21:10:16ランダムで文字列を作成して、正規表現にマッチしていればループを抜ける
0779デフォルトの名無しさん
2007/07/19(木) 21:17:15むかーし、そんな感じのテストツール作ろうかと考えたこともあった。
0780デフォルトの名無しさん
2007/07/19(木) 21:30:12適当に使用する文字を絞り込んでから778の言うようにランダムに作成してマッチングかけるのが手っ取り早そうだ
仕事なんで出来ないとダメってのは何かおかしいと思うぞ
出来ないものは出来ないと言うべきだ
0781デフォルトの名無しさん
2007/07/19(木) 21:38:22最初それで考えたんだが、文字数だとかが絡んだりするとそう簡単にはいかんことに気付き断念
>>780
普通はそうなんだろうが、そうもいかない会社はいくらでもあるのよ。
とりあえず対応できそうな構文のみでいってみるか・・・
0782デフォルトの名無しさん
2007/07/19(木) 21:43:34だいたい何の用途で使うんだ?
正規表現って言ってもどこまで対応するかによってとんでもなく面倒だぜ
0783754・757
2007/07/19(木) 21:51:25なるほど、これでだいぶ理解できました
ありがとうございます
>>760
全くの初心者です
今日、早速本を買ってきました
これから勉強していこうと思います
ありがとうございました。
0784デフォルトの名無しさん
2007/07/19(木) 22:27:57特にAPIは無いんじゃないの?
0785デフォルトの名無しさん
2007/07/19(木) 22:32:001.
ある表現から固定の決まったシーケンスを出すようにする
[a-z]* なら aaa
[0-9]* なら 000
2.
あるシーケンスの正規表現マッチングを崩さないような変更を行うメソッドを
いろいろ(対応する正規表現分だけ)用意する
例:
[a-z]* の aaa を aab にするとか、 aaにするとか。
3.
1.に対して2.を適当な回数適用する
どう?
まぁできあがる表現に偏りはできると思うがね。
ランダムの定義が曖昧だしこれでいいよな?
1.のシードをある程度余分に作っておけばそれなりにばらけるかもしれないし。
0786デフォルトの名無しさん
2007/07/19(木) 22:57:47自然言語マッチ用言語の本領発揮!
0787デフォルトの名無しさん
2007/07/19(木) 23:07:05まずは対応できる正規表現のパターンを絞り込む事が重要だな
絞り込んじまえばたいしたことはないと思うが、全てに対応しろといったら1プロジェクトだろう
0788デフォルトの名無しさん
2007/07/19(木) 23:52:46よく分かりません。
例えば、配列の偶数要素をキー、奇数要素を値とするMapを生成するメソッド
public static Map arr2map(Object[] arr)
のMapをGenericsを使った記述にする場合、
(1)public static Map<Object,Object> arr2map(Object[] arr)
(2)public static Map<?, ?> arr2map(Object[] arr)
(3)public static <K, V> Map<K, V> arr2map(Object[] arr)
などが考えられますが、どれがいいものでしょうか。
なにか、ガイドラインとなる書籍、URL等ありましたら教えてください。
0789デフォルトの名無しさん
2007/07/20(金) 00:00:27言っている意味も考えられる選択肢もワカラネ
そもそもObject[]の時点で終わってるのでGenericsに対応しない方がいいんじゃね?
キーの型がKey、値の型がValueであるならば
public static Map<Key, Vaue> arr2map(Object[] arr)
が正しい。
キーも値も決まってないならば、
public static Map<Object, Object> arr2map(Object[] arr)
となるけど、それならば
public static Map arr2map(Object[] arr)
のままでいいんじゃね?ww
0790デフォルトの名無しさん
2007/07/20(金) 00:03:010791デフォルトの名無しさん
2007/07/20(金) 00:14:43Map<? extend foo, ? extend bar>かMap<K, V>だろうねぇ。
けど、>配列の偶数要素をキー、奇数要素を値とする
なんて非OOなレコードの持ち方が変。
keyとvalueのペアを持つエントリクラス作ってそれを持っておくだろ。
static Map arr2map(Object[])なんて変換関数用意するんじゃなくて初めからmapやsetで持ってkeyだけ・valueだけ詰めた配列返すメソッド用意する。
とか、こういう設計の方が自然。
0792デフォルトの名無しさん
2007/07/20(金) 00:18:160793788
2007/07/20(金) 00:37:15引数のObject[]が非非OOな持ち方なので、無理に総称型
使う必要は無い(ClassCastExceptionに起こしかねない)と
いうことですね。
設計考え直してみます。
ありがとう。
0794デフォルトの名無しさん
2007/07/20(金) 00:45:13使う必要は無い(ClassCastExceptionに起こしかねない)
いや、違う自分の良いように考えすぎ。
アプローチ間違ってますよってだけ。
キャストで例外出すってのはまた別の話。
0795デフォルトの名無しさん
2007/07/20(金) 00:58:01俺だったら、こんな感じかなぁ
/** 今後はこっち使ってください */
public static <K, V> Map<K,V> arr2map(Object[] arr, Class<K> keyType, Class<V> valueType) {
Map<K,V> map = new HashMap<K,V>();
for(int i = 0; i < arr.length - 1; i+=2){
map.put(keyType.cast(arr[i]), valueType(arr[i+1]));
}
return map;
}
/** 互換性のため */
@Deprecated
public static Map<?, ?> arr2map(Object arr) {
return arr2map(arr, Object.class, Object.class);
}
0796デフォルトの名無しさん
2007/07/20(金) 00:59:06○ map.put(keyType.cast(arr[i]), valueType.cast(arr[i+1]));
× public static Map<?, ?> arr2map(Object arr) {
○ public static Map<?, ?> arr2map(Object[] arr) {
■ このスレッドは過去ログ倉庫に格納されています