1 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 01:02:31 ] プログラミング言語Javaに関する質問スレです。 JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 ttp://pc11.2ch.net/hp/ Webプログラミング ttp://pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 ttp://www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド ★★Java質問・相談スレッド133★★ ttp://pc12.2ch.net/test/read.cgi/tech/1251630161/ 次スレは>>950 あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 ttp://www.wikiroom.com/java/
682 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:40:03 ] >>681 The method Integer(Object) is undefined for the type ○○○(自分で作ったクラスの名前) と言われました・・・
683 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:42:51 ] list.get(0).intValue()
684 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:43:29 ] あごめんなさい キャストじゃなくてInteger(list.get(0))で新しく作ろうとしてました キャストならできました! ありがとうございます
685 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 17:45:23 ] >>683 これだとできませんでした
686 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 19:40:07 ] ((Integer) list.get(0)).intValue()
687 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 22:06:48 ] import java.awt.*; import java.awt.event.*; import javax.swing.*;; public class renshu3 extends JApplet { private JLabel lb; private JPanel pn; private JRadioButton rb1,rb2,tmp; private ButtonGroup bg; public void init() { lb=new JLabel("いらっしゃいませ。"); pn=new JPanel(); rb1=new JRadioButton("白", true); rb2=new JRadioButton("黒", false); bg=new ButtonGroup(); bg.add(rb1); bg.add(rb2); pn.add(rb1); pn.add(rb2); add(lb, BorderLayout.NORTH); add(pn, BorderLayout.SOUTH); rb1.addActionListener(new SampleActionListener()); rb2.addActionListener(new SampleActionListener()); }
688 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 22:07:29 ] class SampleActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { tmp=(JRadioButton) e.getSource(); lb.setText(tmp.getText() + "を選びました。"); if(){ lb.setForeground(Color.white); } else{ lb.setForeground(Color.black); } } } 質問です。ラジオボタンが2つあって、それぞれ押すと色が変わるようにしたいんですが ifの括弧に何を入れればいいんでしょうか。
689 名前:デフォルトの名無しさん [2009/11/09(月) 22:10:53 ] trueかfalseになる様な式を入れればいいんじゃないでしょうか
690 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 22:18:04 ] >>688 解らないならばAcionLisnerを2種類用意しろ
691 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 22:21:39 ] 「〜を選びました」って出せるのにif文の内容が判らないとは、これいかに?
692 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 22:25:12 ] その文は最初からありましたので
693 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 22:53:24 ] ttp://www.open-tec.info/modules/download/index.php?cid=1 こちらのサイトのWindows版を入手したものの 使い方が分からずにいます。 java実行環境があれば実行できるようですが、 >>3 のリンク先 ttp://www.java.com/ja からjavaをインストールしましたが、どのように使うのか分かりません。 現在インストールしているのはJava Version6 Update 17です。 根本的なことが理解できていないような気がしますが どなたかご教示下さい。
694 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:11:54 ] ここはプログラミングの板であってソフト板じゃない
695 名前:687 mailto:sage [2009/11/09(月) 23:14:32 ] 括弧にtrueを入れてみたところ、白にはなりましたが黒にはなりませんでした。 ttp://www.dotup.org/uploda/www.dotup.org346945.jpg どうか教えてくださいませんか。
696 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:22:59 ] 質問なのですが三つの座標が一直線に並んでいるか判定するにはどうすればよいでしょうか
697 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:26:57 ] 面倒なら目視すればいいんじゃないんでしょうか?
698 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:37:05 ] >>696 点A,B,Cとして、二点間A-B,A-Cの傾斜を求めて一致するか判定。なお正負には注意。
699 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:39:27 ] >>695 >>690 に書いてある通り、クラスを2つ作ればいいだけの話だと思うんだけど IDEを使わないで書いたコードなので、たぶんタイプミスがあると思う↓ rb1.addActionListener(new RB1ActionListener()); rb2.addActionListener(new RB2ActionListener()); private class RB1ActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { /* 白の時したい処理を書く */ }} private class RB2ActionListener implements ActionListener { public void actionPerformed(ActionEvent e) { /* 黒の時したい処理を書く */ }}
700 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 23:54:58 ] 教えていただいてて申し訳ないですが、さっぱり分からないのでtrueのまま提出することにします。
701 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:08:54 ] >>700 trueのかわりに「rb1.isSelected()」って書いとけ!
702 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 00:15:08 ] あきらめろ
703 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 01:16:14 ] 理屈が分からなくても動きさえすれば無問題 そんなふうに考えていた時期が俺にもありました
704 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 03:41:49 ] >>701 激烈之謝謝!
705 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 10:16:20 ] JEditorPaneにHTMLを読み込んだ後に、HTMLを追加できないですかね? <html><body> <!-- HogeHogeな内容 --> <!-- ここに新しく追加 --> </body></html>
706 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:39:23 ] Faceltesのタグファイルについてです。 // タグファイル <ui:composition><f:convertDateTime timeZone="JST"/></ui:composition> // 使用側 ... <my:convertDateTime dateStyle="full" /> ... のように元のタグ(f:convertDateTime)を利用してカスタムタグ(my:convertDateTime)を作る場合、カスタムタグ の属性値を委譲先のタグの属性に渡すにはどうやると良いでしょうか? 上の例ですと <ui:composition><f:convertDateTime dateStyle=#{dateStyle} timeZone="JST"/></ui:composition> とすれば可能ですが#{dateStyle}が空の場合に問題となります。
707 名前:705 mailto:sage [2009/11/10(火) 19:03:34 ] 自分で解決してしまいました HTMLEditorKitの使い方を間違えていたようですorz
708 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 01:32:05 ] コレクションワークフレームについて質問です。 現在「Javaの道」で勉強中なのですが、 ttp://www.javaroad.jp/java_collection2.htm 上記URLの例1の中で下記1.のような記述があります。 これは下記2.と同じ意味なのでしょうか。 2.でもエラーはでませんでした。 addメソッドの中に new ** というように記述するのを初めてみたもので。 メモリ確保やニュアンスがちがうのでしょうか。 1.(Javaの道 記載コード void addhead(List exList) { for (int i = 0; i < 10000; i++) { exList.add(0, new Integer(i)); } } 2.(自分で書き換えたコード void addhead(List exList) { for (int i = 0; i < 10000; i++) { Integer it = new Integer(i); exList.add(0, it); } }
709 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 10:44:54 ] 一緒です System.out.println(123 + 456); と int x = 123 + 456; System.out.println(x); が一緒なのと同じ理屈
710 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:03:58 ] >>708 こっちは同じコードだけど >>709 こっちは最適化で変わるんじゃ・・
711 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:59:15 ] >>708 一旦変数に参照させてから使わないといけない、という決まりは無い。 String s = new SimpleDateFormat("yyyy/MM/dd").format(new Date()); こういうのもあり。
712 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 07:08:19 ] ダブルバッファリングのことについて質問です 「Swing ではJRootPaneとそのコンテンツペインそれからJPanelクラスがダブルバッファリングを有効にしています」 というような記述を見つけたのですが、JPanel上に描画を行うならダブルバッファリングを行う必要はないのでしょうか 一般公開されてるソースを参考にJAVAでゲーム作成の勉強をしているのですが、 JPanelを使っているのにダブルバッファリングを使っていてちょっと混乱しています。
713 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 10:14:57 ] そのソースとやらがアクティブレンダリングやってるなら必要。やってないなら不要。
714 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 19:39:25 ] 自分で図形が動いていくプログラムを書いて、表示が乱れるかどうかやってみりゃいいんじゃね。
715 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 19:46:47 ] C++ 使いです、C++ では、コンストラクタで例外を投げないというのがセオリーなのですが java も同様に考えていいでしょうか?
716 名前:712 mailto:sage [2009/11/12(木) 20:04:39 ] >>713 返答ありがとうございます。 アクティブレンダリング(自前の描画メソッド?)が必須なときがいまいち分かってないのですが、もう少し調べてみます。 >>714 返答ありがとうございます。 自分でも色々実験して検証してみます。
717 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:14:52 ] >>715 Java では普通に例外を投げる。
718 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:47:27 ] そもそもリークするからとか言い出すC++厨が頭沸いてる。 コンストラクタで引っかかるようなモン、処理継続させたって無駄じゃね?
719 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 21:12:54 ] >>715 です >>717 郷に入らずんば、郷に従え として、例外を投げても後始末してくれるという具合に考えます。 >>718 あまりにも思考が短絡的ですね。
720 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 22:03:04 ] ふーん、 ・コンストラクタに置くしかなくて、 ・でもエラーが起きても処理を継続させないといけない って状況って何?
721 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 22:51:00 ] 好きにしろよ 同意を求める為だけに質問するフリをするな
722 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:19:34 ] 質問じゃねーよ、当てこすってるんだよ。 C++のローカル神話持ち込んできた癖に、そっちこそ好きにしろやww
723 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:37:33 ] 分かると思って安価入れなかったんだけど、勘違い君に噛み付かれてるなあ 721は719向けね
724 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:39:59 ] 相手が何でも察すると思うな。 きちんとドキュメントにしたまえ。
725 名前:708 mailto:sage [2009/11/12(木) 23:55:00 ] >>709 , >>710 , >>711 ご回答ありがとうございます。 >>711 これはすごいw。なんて複雑怪奇なんだ。 でも、行数減らしてかけるからスッキリしますね。
726 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:59:39 ] どこかのコンストラクタでエラーが起きただけでプログラム停止できれば楽だろうねぇ。
727 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:03:10 ] 止めたくなければ上位のメソッドでキャッチすりゃいいだけだよ どこまで頭悪いんだ
728 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:04:46 ] むしろなんでC++はコンストラクタで例外投げないの? コレクションからコレクション作るときnull許可しないなら普通に投げないか?
729 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:08:42 ] C++ コンストラクタ 例外でググるとそんなのは迷信だってサイトが大量に出てきて笑えるよ 時代遅れの妄言だな
730 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:35:35 ] >>727 >>720
731 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:41:16 ] >>725 え゛? 複雑? あー、でもJavaじゃメソッドチェインはあんまやらないから、見慣れない人がいるのもしゃーないのか。 ライブラリが「void返すくらいならthis返せ」って思想だったらよかったのに。
732 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 02:07:25 ] >>727 たぶん、new した所が普通に上位のメソッドだという考えになっていないんだろうね。 C++ だとローカル変数を置くだけでオブジェクトが生成されちゃうこともあって。
733 名前:質問者 [2009/11/13(金) 08:48:30 ] 1. Java1.6の、型を限定したListの作り方を教えてください。 2. inport java.util.List;として、他の場所ではList型が使えているのに、 new List(); が、「型Listのインスタンスを生成できません。」とコンパイルエラーになります。 理由に心当たりがありましたらご教授ください。
734 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 09:17:02 ] Listは実装じゃなくてインタフェースだから List型の変数は宣言できても実体は作れない 実体はLinkedList<T>やArrayList<T>や自分で作った実装のあるクラスでないといけない List<?> list = new ArrayList<?>(); とか
735 名前:733 [2009/11/13(金) 09:50:48 ] >>734 ありがとうございました。
736 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:34:51 ] エラーでてるのに処理続けてもなあ。 エラー出ない様に対処してから再試行するべき。
737 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:52:08 ] 勘違い君は、>>727 だけでなく>>732 もなのか。 >>726 では「キャッチしなくていいなら楽だ」って意味なのに、>>727 で「キャッチすりゃいい」なんてレス 入れるのは勘違いも甚だしい。 また、>>718 >>720 の脈絡からすれば「コンストラクタでエラーならプロセス停止するべき」って言ってる に等しい。 リークが問題になるのはプロセスを継続する場合なんだからな。 「処理」って「エラーになったクラスの処理」だったなんて寝ぼけたこと言うのかもしれんが。
738 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:20:09 ] 578 名前: デフォルトの名無しさん [sage] 投稿日: 2009/11/13(金) 12:00:40 HTTPは無理しすぎだからな。 本来は閲覧専用のプロトコルだったはずだ。 いつの間にか書き込みができるようになったり、 個人識別ができるようになったり、 pushもできるようになったり。
739 名前:732 mailto:sage [2009/11/13(金) 12:22:46 ] >>737 >>737 は、>>727 がどのレスに対するレスなのかを勘違いしていると思われる。
740 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 12:36:53 ] アンカー付けようねってことだねwww
741 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:33:09 ] Javaで正規表現を使うにはどうしたらいいでしょうか? また、Javaの文字(char)のユニコード値を得る(int)コードはどうしたらいいでしょうか?
742 名前:デフォルトの名無しさん [2009/11/13(金) 13:33:50 ] 間違えてsageてしまったのでageます
743 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:37:26 ] 正規表現はPatternクラス charはキャストすればintに入る
744 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 13:39:48 ] 間違えた 「キャストしなくても」
745 名前:デフォルトの名無しさん [2009/11/13(金) 13:44:32 ] >>743 (名無しさん) ありがとう
746 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 19:49:29 ] Hibernateについて質問させてください。 複数クラスとテーブルのマッピングSQLを作成するにあたり、 以下の方法では取得できています。 @itより抜粋 Query sqlQuery = session.createSQLQuery( " select {mem.*},{wg.*} from member {mem} join workgroup {wg} “ + “ on {mem}.groupno = {wg}.groupno", new String[] { "mem","wg"}, new Class[] {Member.class,WorkGroup.class}); List list =sqlQuery.list(); for (int i = 0; i < list.size(); i++) { Object[] items = (Object[]) list.get(i); Member member = (Member)items[0]; WorkGroup group = (WorkGroup)items[1]; System.out.println( member.getNo() + ":" + member.getName() + ";group:" + group.getGroupname() ); } session.close(); 質問に入りますが、全列を使用するわけではないので、取得列名を絞り込むこと は可能でしょうか。絞込みによる性能向上を期待しています。 どなたかお分かりになる方の助言をお待ちしています。 よろしくお願いいたします。
747 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:01:07 ] 質問します。 java で、ファイルに書き込まれている内容の比較をしたいのですが、そのようなメッソッドは無いでしょうか?
748 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:11:55 ] Javaでやる必要があんのけ?
749 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:14:29 ] javaでやれといわれたので。
750 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:23:00 ] そのようなメッソッドはありません 普通にファイルを読み込んでから普通に内容を比較してください
751 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:27:47 ] 黒魔法メッソッド!!!
752 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:38:16 ] >>747 MappedByteBuffer#equals()でも使うのがお手軽じゃない? 使ったこと無いけど。
753 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 23:34:26 ] pc12.2ch.net/test/read.cgi/tech/1248012902/ ★★ Java の宿題ここで答えます Part 68 ★★
754 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 23:51:03 ] 質問させてください。 現在Swingで、コンボボックスを画像表示にし、 そこで選択された画像を、フレーム中央に表示させるプログラムを作っています。 ところが、getSelectedItemの設定で行き詰ってしまいました。 どなたかアイディアをお貸しいただければ幸いです。 ちなみに現在のソースは以下のようになっています。 色々いじくったので可笑しなことになっているかもしれません。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/830.java どうぞよろしくお願いします。
755 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:51:34 ] >>754 combo.setRenderer(new JLabel()); になってないか?
756 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:54:35 ] >>754 JavaDocではこうなっている。 void setRenderer(ListCellRenderer aRenderer)
757 名前:755-756 mailto:sage [2009/11/14(土) 01:08:46 ] 間違えた。すまん
758 名前:754 mailto:sage [2009/11/14(土) 01:16:20 ] >>755-756 いえ、非常にありがたいです。 他にも何かお気づきの点があれば、よろしくお願いします。
759 名前:755-756 mailto:sage [2009/11/14(土) 01:31:36 ] class ComboLabelにtextとicon保存 public Component getListCellRendererComponent内で上で保存したtextとiconをJLabelにセットしなければならないから、 class ComboLabel{ にtext追加。 public Component getListCellRendererComponent( にsetText追加。 すればいいんじゃないかと……
760 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:04:27 ] >>754 これで普通に画像の切り替えできてるよ。 変数が見えてなかったりLabelが表示されてなかったりしたのも直したけど。 MyCellRenderer renderer = new MyCellRenderer(); combo.setRenderer(renderer); combo.addItemListener(renderer);//追加 class MyCellRenderer extends JLabel implements ItemListener, /*追加*/ ListCellRenderer { ..... //省略 public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED){ lb.setIcon(((ComboLabel)model.getSelectedItem()).getIcon()); } }
761 名前:754 mailto:sage [2009/11/14(土) 02:39:10 ] 皆さんどうもありがとうございます。 早速教えていただいたように直してみました。 ところが、 lb.setIcon(((ComboLabel)model.getSelectedItem()).getIcon()); の箇所で、lb、modelを解決できませんというエラーが表示されてしまいます。 どこが間違っているのか、自分ではどうしても解決できませんでした。 もう一度教えていただいてもよろしいでしょうか。 お願いします。 ちなみに現在のソースです。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/831.java
762 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:46:43 ] >>761 こっちに変えてみな。 public void itemStateChanged(ItemEvent e) { if (e.getStateChange() == ItemEvent.SELECTED){ ComboLabel lbl = (ComboLabel)((JComboBox)e.getSource()).getSelectedItem(); lb.setIcon(lbl.getIcon()); //lb.setText(lbl.getText()); Textが必要ならComboLabelにgetText()を追加する } }
763 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 02:49:14 ] あと以下の2行を修正 public class Combobox extends JFrame{ private JLabel lb; //追加 //JLabel lb = new JLabel(("ここに画像が表示されます")); この行コメントアウトして下のように変更 lb = new JLabel(("ここに画像が表示されます"));;
764 名前:754 mailto:sage [2009/11/14(土) 03:01:24 ] 迅速なお返事をどうもありがとうございます。 教えていただいたことを元に、もう少し自分で考えてみようと思います。 こんなに遅い時間まで、本当にどうもありがとうございました。
765 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 03:05:30 ] >>764 適当に動くようにしたソースはっとくよ。 rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/832.java
766 名前:754 mailto:sage [2009/11/14(土) 03:12:17 ] わざわざソースまで! 自分の求めていたとおりに動かすことができました。 本当にありがとうございます。 自分ももっと勉強します。
767 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 03:35:46 ] MyCellRenderer extends JLabel implements ListCellRenderer よりも MyCellRenderer extends DefaultListCellRenderer にするといいよ。 getListCellRendererComponent() の最初で super.getListCellRendererComponent(); を呼んで、 アイコンをセットして、 最後に return this; とすればいい。
768 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 07:53:25 ] java でC/C++ でいうところの、関数ポインタのような振る舞いをさせるには どのようなデザインパターンを用いればいいでしょうか? 2つのboolean 値があって、その値の内容の組み合わせパターン(2^2)によって、呼び出すメソッドを変えたいのですが if 〜else if 構文や、switch 文はかっこ悪いので使いたくありません、よろしくお願いします。
769 名前:732 mailto:sage [2009/11/14(土) 08:59:26 ] >>768 Java では関数ボインタを変数に持ったり、関数ポインタを使って多相化することはない。 そういうことをしたい時は、オブジェクトを変数に持って、パターンによって、 共通のインタフェースを実装した異なるオブジェクトを呼ぶことになる。 関数テーブルの代わりにはオブジェクトテーブルということになるが、 オブジェクトテーブル以外にも、4つのパターンを表現した enum クラスを作って、 各 enum 定数の中に実装を書くなどの作戦もある。
770 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 09:17:34 ] >>769 Thx
771 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 09:28:13 ] >>769 それ、なんてStrategyパターン?
772 名前:768 mailto:sage [2009/11/14(土) 09:41:43 ] >>771 外していたらごめんなさい、多分State パターンではないでしょうか?
773 名前:デフォルトの名無しさん [2009/11/14(土) 14:23:46 ] 総称型の配列が作れません。 以下のような場合どうすればいいのでしょうか? public T[] getSpecifiedElements(T[] allElements) { //allElementの一部要素をT配列で返したい。 } ArrayList<T> temp = new ArrayList<T>(); に必要な分をつめこんで、 temp.toArray(new T[temp.size()]); ってしたいのですが無理なようです。 (T) temp.toArray(); もクラスキャストエクセプションになってしまいした。。。
774 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:38:55 ] >>772 お前がやりたいのは、ちょっとした計算ロジックを切りかえたい ということに見えるが、それだとしたらStrategyパターンであってる
775 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:56:35 ] >>773 無理。 代替案としては Class<T> を引数で指定してもらうか、 配列使わずList<T>で受け渡しするか。 <T> T[] getSpecifiedElements (T[] allElements, Class<T> clazz) { List<T> temp = new ArrayList<T>(); //tempに必要な要素をつめる。 return temp.toArray((T[])Array.newInstance(clazz, temp.size())); } List<T> getSpecifiedElements (List<T> allElements) { List<T> temp = new ArrayList<T>(); //tempに必要な要素をつめる。 return temp; }
776 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 14:57:52 ] >>773 総称型の配列をnewすることは、Javaの言語仕様上できない。 多少強引だがこれでOK。 @SuppressWarnings("unchecked") T[] subElements = (T[]) java.lang.reflect.Array.newInstance( allElements.getClass().getComponentType(), temp.size()); return temp.toArray(subElements); つーか、そもそも配列使うのやめればいいだけなんだけどな。
777 名前:デフォルトの名無しさん [2009/11/14(土) 15:25:04 ] >>775 >>776 引数でクラス指定すると総称型の意味がないし、 ワーニング潰すのも気持ち悪いので、 諦めてList<T>を返すことにしました。 しかし勉強になりました。ありがとうございます。
778 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:01:01 ] ストラッツの質問はここでも大丈夫でしょうか?jsp にアクセス(リロード)した際、自動的にActionクラスを実行するプログラムを組みたいのですが、どうすれば良いでしょうか?
779 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:01:46 ] >>776 jdk7だと[]とListの区別がなくなるのかも。
780 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:58:38 ] www.tomicom.ac.jp/~koba/doja5/jguidefordoja5api/javadoc/com/nttdocomo/security/SymmetricCipher.html ここを参考に,特定の文字列をAESで暗号化するiアプリを作成してみたのだけど,例外が出てしまう… どなたか,原因が分かる方ご教授お願いします. 例外 Main :java.lang.IllegalArgumentException: Can't use the sessionkey or the iv with the algorithm keyTest java.lang.IllegalArgumentException: Can't use the sessionkey or the iv with the algorithm at com.nttdocomo.security.CipherSessionKey.createSymmetricCipher(+71) at cryptionClass.encryption(+72) at keyTest.start(+14) com.nttdocomo.security.CipherSessionKey: Can't use the sessionkey or the iv with the algorithm ソースコード ttp://www.cms-e.net/java/src/
781 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 17:24:28 ] "Can't use the sessionkey or the iv with the algorithm" って書いてあるけど?
782 名前:780 mailto:sage [2009/11/14(土) 17:33:11 ] >>781 まぁ,そのエラーメッセージの意味は分かるのだけど,解決策が分からない…. 参考URLではプログラム解説のためにDESアルゴリズムを用いているけどできればAESを使いたいので.