- 1 名前:Javaが初心者 mailto:sage [2008/05/12(月) 03:05:27 ]
- プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。 Web製作管理 pc11.2ch.net/hp/ Webプログラミング pc11.2ch.net/php/ をご利用下さい。 よくある質問 ・「コマンドまたはファイル名が違います」 「'javac' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 「Exception in thread "main" java.lang.NoClassDefFoundError: 」 www.wikiroom.com/java/?path,classpath ・String に == は使うな。equals() を使え。 ・「\12288 は不正な文字です。」 文字リテラル以外で全角スペースは使えません。半角スペースに。 ・その他の質問→「APIのjavadoc見ろ」 前スレッド 【初心者】Java質問・相談スレッド114【大歓迎】 pc11.2ch.net/test/read.cgi/tech/1207385614/ 次スレは>>990あたりで。 過去ログ、関連スレッド、よくある質問とその回答など、 質問をする前に、貴方が見なければならないサイトについての情報は、 下のwikiのページにまとめてあります。 www.wikiroom.com/java/
- 652 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:35:43 ]
- >>648
それだと違うインスタンスのロックにならないから、 例えば別のVectorインスタンス(クローンとか)から内部を変更されてしまい、 要求する仕様を満たさないよ。そういうのは見つけにくいバグになるんじゃないの?
- 653 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:39:59 ]
- >>652
違うインスタンスって何 内部って何の内部 要求する仕様とやらをはっきりさせてくれ
- 654 名前:デフォルトの名無しさん [2008/05/31(土) 15:42:13 ]
- ↑自分が答えられる範囲を超えるとこのように暴走しますw
- 655 名前:デフォルトの名無しさん [2008/05/31(土) 15:43:12 ]
- パッケージについて質問します。
デスクトップ上にTestフォルダを作成し その中にメインの "Test.java" と "DirTestA.java" を置きました。 別階層からTest.javaのオブジェクトを作るため Test.javaに package Test; と書いてimportして作成できたのですが そうするとTest.javaで 同じ階層内にいるDirTestA.javaのオブジェクトを作ろうとしたら DirTestAのシンボルを解決できません。とでます。 試しに DirTestA.javaにも package Test; と書いて Test.javaで import Test.DirTestA; と書いても 解決しません。 どうすれば、同じ階層内でも参照できますか?
- 656 名前:デフォルトの名無しさん [2008/05/31(土) 15:43:39 ]
- なんだ。>>653は親切そうだったけど実はすぐ発狂するキチガイだったのかww
- 657 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 15:56:13 ]
- >652
良く分からないなら無理に指摘しなくても大丈夫です。 問題が起きてから騒いでください。 >655 コンパイルする場所が間違ってるかも Testフォルダがあるフォルダでコンパイルしてますか? (パッケージ名は小文字推奨です。クラス名と区別が付かない等の為) あとは、変更前のclassファイルが残ってる可能性も。
- 658 名前:653 mailto:sage [2008/05/31(土) 15:58:45 ]
- 別に暴走も発狂もしてないけど・・・
質問に答えるために必要な追加情報を求めてるだけだよ (言い換えると質問が意味不明)
- 659 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:04:25 ]
- >>655
ひとつ上のディレクトリから javac Test/Test.java ってやってみるとどう?
- 660 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:05:46 ]
- Hoge{
private int n; Hoge( int i ){ n = i: } } Hoge hoge = new Hoge( 10 );: これに新しい値を入れたい場合 hoge = null; hoge = new Hoge( 100 ); でないとダメですか? null代入せず上から直接 hoge = new Hoge( 100 ); した場合はどうなりますか?
- 661 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:08:20 ]
- >>660
直接入れても一緒。 null代入は不要。
- 662 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:17:35 ]
- ですよね、ありがとうございます
- 663 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:19:26 ]
- C++のnewのイメージとごっちゃになりました
たしかC++だと落ちますよね?
- 664 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:33:30 ]
- C++のnewはdeleteしないと落ちはしないけどメモリリークになる
JavaのnewはGCが自動的に解放してくれる
- 665 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 16:53:54 ]
- >>658
確かに不明部分があるけど、やってれば分かるようなこの程度のことを詳細に書いてもらったとしても、君程度の技術じゃ答えられないでしょうにww ところで君はその質問にちゃんと答えられる自信はあるんですか?
- 666 名前:デフォルトの名無しさん [2008/05/31(土) 16:55:43 ]
- 教えてください。
以下のようなソースを書いたのですが、 ☆のところで怒られてしまいます。 [アクセス可能な型 Swing_main のエンクロージング・インスタンスがありません。 型 Swing_main のエンク ロージング・インスタンスで割り振りを限定する必要があります (たとえば x.new A() で、x は Swing_main のインスタンス)。] ★は怒られないのに何で☆はだめなのというところが知りたいのですが、 public class Swing_main extends JFrame{ public static void main(String[] args) { //コンストラクタでFrame作成 new Swing_main("test"); //メソッドでFrame作成 Swing_test(); } //コンストラクタ Swing_main(String title){ super(title); ★addWindowListener(new WindowEventHandler() }; //メソッド public static void Swing_test(){ JFrame frame = new JFrame("Jframe1") ; ☆frame.addWindowListener(new WindowEventHandler()); } //WindowListener class WindowEventHandler implements WindowListener{ public void windowActivated(WindowEvent e) ・・など } }
- 667 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:05:34 ]
- >>666
WindowEventHandlerはstatic classじゃないので、外側のクラスSwing_mainのインスタンスが必要 ★はコンストラクタ内なのでthisが存在するが、☆はstaticメソッド内なのでインスタンスが存在しないからエラー
- 668 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:12:54 ]
- >>653
>>658 こうやってすぐ叩かれるから無駄口を吐かない方がいいよ。
- 669 名前:デフォルトの名無しさん [2008/05/31(土) 17:19:39 ]
- >>667さん
回答ありがとうございます! WindowEventHandler をstaticにしたところ怒られなくなりました。 ただ、☆にはframeというインスタンスがあるんですが、 これだと駄目という部分が理解できません。 そもそもこういうつくりは駄目だということでしょうか
- 670 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:25:55 ]
- >>669
そのframeはJFrameであって、Swing_mainじゃないし。 もし Swing_main frame = ..... ; であるなら、 frame.new WindowEventHandler() のように書ける。
- 671 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:26:24 ]
- JAVAにはOpenCVのような画像処理を扱うAPIはありますでしょうか。
OpenCVの移植があれば最高なのですが、ぐぐっても出てこないということは無いのですかね。。
- 672 名前:デフォルトの名無しさん [2008/05/31(土) 17:29:21 ]
- 駆け出しのプログラマなんだけど、休日とか、書類作成メインの日とか、コーディングしない日があるのが怖い
コードを書かないと実力が落ちそう そこで、将棋でいう「詰め将棋」みたいに、シンプルなプログラミングの問題を掲載したサイトとか本とか無い?
- 673 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:32:29 ]
- >>672
っ pc11.2ch.net/test/read.cgi/tech/1212085079/
- 674 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:33:58 ]
- >>652
そのVectorに関しての質問です。 cloneで生成したインスタンスから、clone元のインスタンスを操作する方法を教えてください。 よろしくお願いします。
- 675 名前:デフォルトの名無しさん [2008/05/31(土) 17:39:38 ]
- Vectorの質問というよりもJavaコレクションフレームワークの全体像から勉強しなおした方がいいんじゃないの?
- 676 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 17:41:34 ]
- >>674
?
- 677 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:31:14 ]
- wisdom.sakura.ne.jp/system/java/swing/swing2.html
ここを見て勉強していたのですが、 awtでは描画処理をpaint()をオーバーライドして行っていたのに、 swingではpaint()のオーバーライドは推奨されていない、と書かれています。 何故使ってはマズいのかということと、 swingでGraphicsクラスのオブジェクトを得て描画処理するのはどういう風にやるのが普通なのか教えて下さい。
- 678 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 19:41:32 ]
- >>677
paintは、そのコンポーネント自身だけでなく、ボーダーや子コンポーネントも描かないといけないのだけれど、 オーバーライドするとそれが行われなくなってしまうのでマズイ。 swingでは、代わりに protected void paintComponent(Graphics g) をオーバーライドしてください。
- 679 名前:678 mailto:sage [2008/05/31(土) 19:53:30 ]
- あぁ、ただし JApplet には paintComponent はありません。
paintComponent を持ってるのは JComponent の子孫だけ。 JApplet に直接描きたい場合は paint をオーバーライドするしかない。 普通は中に swing コンポーネントを配置したいから JApplet を使うのであって、JApplet に直接描くのはあんまりしないと思う。
- 680 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 20:10:30 ]
- じゃ、なんでJAppletをswingのパッケージに入れたんでしょうか。混乱しませんか?
- 681 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 20:16:11 ]
- javax.swingパッケージにはコンポーネント以外のクラスもいっぱい入ってるよ
ActionとかTimerとかSwingWorkerとか ↓みてみ java.sun.com/javase/ja/6/docs/ja/api/javax/swing/package-summary.html
- 682 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:08:23 ]
- Cよりjavaから先に勉強した方がいいの?
- 683 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:18:08 ]
- >>682
初心者のためのプログラミング言語ガイド Part9 pc11.2ch.net/test/read.cgi/tech/1210941509/
- 684 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 21:19:38 ]
- 興味がある言語からやればいい
- 685 名前:デフォルトの名無しさん [2008/05/31(土) 22:15:20 ]
- JFrameにJAppletをaddすべきかどうかいつも悩むんですけど・・
AWTでは全く問題ないのにswingはpaint関連を知っていると、少し変な設計なんですがどう思いますか?
- 686 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:55:57 ]
- >>685
まぁ別にいいんじゃない? 気になるならFrameの上にJAppletを置けば
- 687 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 22:59:36 ]
- てか、JAppletの上にJPanelを引いてなにかするべきだろ?
そうすれば同じようにJFrame上でも動作可能になる。
- 688 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:05:56 ]
- >>686
そうするとSwingのUIから外れちゃいませんか?
- 689 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:11:27 ]
- JPanelにLinkedList<JLabel>を配置したい場合はどうしたらよいでしょうか?
- 690 名前:689 mailto:sage [2008/05/31(土) 23:13:42 ]
- スイマセン、やっぱりもうちょっと自分で考えてみます。
- 691 名前:689 mailto:sage [2008/05/31(土) 23:16:52 ]
- 自己解決しました。スレ汚し&連投失礼致しました。
- 692 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:32:25 ]
- >>688
そういう細かいことが気になるんなら、687 の言うように JPanel 上にすべてを構築して、 アプレットの場合はそのパネルを JApplet の中に置き、 アプリケーションの場合はそのパネルを JFrame の中に置くようにすればいいよ
- 693 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:32:43 ]
- 正規表現を使ったプログラムを作っているのですが、
pattern = Pattern.compile("^Java.*"); matcher = pattern.matcher("JavaでHello World"); boolean b = matcher.matches(); System.out.println(b); pattern = Pattern.compile(".*World$"); matcher = pattern.matcher("JavaでHello World"); boolean c = matcher.matches(); System.out.println(c); このとき同じ文字列に1回1回compileとmatcherを使ってしまいます この場合ならPattern.compile("(^Java.*|.*World$)");とまとめれば済みますが これをもっと多数(50とか60とか)に増やすときにはものすごく長くなってしまうと思います なんとかスッキリまとめる方法はないですか?
- 694 名前:デフォルトの名無しさん mailto:sage [2008/05/31(土) 23:39:28 ]
- 正規表現はそれだけで1冊の本が出るように別の言語と思え
- 695 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:09:19 ]
- 50個追加していき
"ab"+"cd"+"ef"... とやればよい。 そのUIってのは、Menuとかがswingらしくなくnative依存という事だと思うんだけど。 で、>>687はそういうことを言ってたのか。オレの強力なエスパー使っても分からなかった・・
- 696 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:16:22 ]
- >>695
つまりPattern.compile("^Java.*"+".*World$");というように記述すればいいのですか?
- 697 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 00:48:02 ]
- >>693
その質問内容だと、「愚直に|で繋げ」、としかアドバイスできないと思 う。長い正規表現の記述が長くなるのは当たり前。 やりたいことをもっとハイレベルに書けば、正規表現とは違ったスマー トな解決方法もあるかもしれない。
- 698 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:16:19 ]
- >>693
ふと思ったのだが、文字列を1行にしようとしてないか? "(^Java.*" +"|.*World$)" って2行にして書いてもコンパイル時にまとめられるから"(^Java.*|.*World$)"と同じ事だぞ。
- 699 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 01:46:22 ]
- 用途を拡張したいということだろ
ただつなぐだけなら誰でも分かる話
- 700 名前:693 mailto:sage [2008/06/01(日) 02:18:15 ]
- やりたいのはテキストファイルを読み込んで1行ごとにパターンマッチしてるかを
判定していくプログラムですね ただ、パターンが大量にあるのでそれをソースコードの中に全部書いていくのは 無駄が大量なのではないかと疑問に思ったしだいで チェックしたいパターンを別のファイルに記述しておいて そのファイルを読み込むという方法も考えましたが、改行文字の処理が面倒そうですし
- 701 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:20:24 ]
- >>700 for ループでぶん回せば?
- 702 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 02:56:43 ]
- ほとんどの場合に最初の方のパターンでマッチするから、後のパターンは無駄になる事が多いって事かな。
なら、 >チェックしたいパターンを別のファイルに記述しておいてそのファイルを読み込む でもいいと思うけど。配列にした方が早いかも知れんが。 >改行文字の処理が面倒そう これが良くわからん。BufferedReader#readLine()で1行ずつ読むだけだと思うのだが、何かまずいのか?
- 703 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:04:30 ]
- そこまで考えてやることもないだろう。
- 704 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:08:40 ]
- >>702
1行ごとに ^Java.* みたいなのを書いていったファイルを読むと考えていますが readline()は改行文字を読まないんでしたっけ? それなら1行呼んでそれに+していく方法に問題は無いんですが
- 705 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:11:50 ]
- APIドキュメントを読むのは基本
基本が出来ないやつはいつまでたっても馬鹿
- 706 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:19:06 ]
- >>705
申し訳ございません このような愚行でスレを汚してしまったことを深くお詫びします >704は無視していただいて構いません
- 707 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 03:35:11 ]
- ファイル名とかは含まず、画像内容そのもののダイジェストを求めたくて、
↓作ったけど、もうちょっと最適化できないでしょうか? sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=30326 ファイル名とかパスを除くための、 特に46〜50行目ぐらいの↓が無駄な気がするけど、いい案が思い浮かばないです。 // (1)Normalize BufferedImage bimg = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_3BYTE_BGR); Graphics g = bimg.createGraphics(); g.drawImage(icon.getImage(), 0, 0, null); ImageIcon normalize_icon = new ImageIcon(bimg);
- 708 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 04:33:04 ]
- パス or URLが示す(画像)ファイルに含まれるデータのハッシュを使わない理由は?
- 709 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 04:49:01 ]
- >>708
圧縮形式の違いは無視したい。 PNGやBMPとか、クリップボードから取り込んだイメージとかとか デコード済みの画像から作りたいです。
- 710 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 05:08:05 ]
- どういう最適化を望んでいるのかによる。
- 711 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 09:55:50 ]
- 無駄なコードや、性能とか
ImageIconからシリアライズ可能なイメージ情報だけ取得したり できないのかなと思ったのだが、無い?
- 712 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 10:18:26 ]
- >>709
java.awt.image.PixelGrabber つかって画素データ取り出してから 画素データのハッシュ値計算すりゃいいんでは?
- 713 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 12:16:44 ]
- >>707
これでどう static byte[] getImageHash(String path) { return getImageHash(ImageIO.read(new File(path))); } static byte[] getImageHash(URL url) { return getImageHash(ImageIO.read(url)); } static byte[] getImageHash(BufferedImage image) { int[] pixels = new int[image.getWidth() * image.getHeight()]; image.getRGB(0, 0, image.getWidth(), image.getHeight(), pixels, 0, image.getWidth()); return MessageDigest.getInstance(HASH_ALGORITHM).digest(pixels); }
- 714 名前:デフォルトの名無しさん [2008/06/01(日) 13:50:51 ]
- 型変換についてなんですが
スーパークラスA, それを継承しているサブクラスBがあるとして 明示的なキャスト変換以外に 型をスーパAからサブBに変換する方法はありますか?
- 715 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 13:58:25 ]
- >>714
Visitorパターン、またはダブルディスパッチ
- 716 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 18:45:11 ]
- >>713
その手があった。サンクス Officeサンプル画像のBlue hills.jpgで50回ほどベンチマークしてみたけど (JDK 1.6.0_05-b13)で比較したら、new int[];BufferedImage.getRGBのほうが 残念ながら、2割ほど遅かった。 (new int[]とそこへのコピーがオーバーヘッドになっちゃうのかな?) sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=30328 >>712 PixelGrabber、考えて見まつ
- 717 名前:デフォルトの名無しさん [2008/06/01(日) 23:26:06 ]
- testフォルダをルートとして
その中にtestaとtestbのフォルダを作って testaフォルダの中にあるjavaファイルから testbのフォルダの中にあるファイルデータaa.textを ロードする場合の指定は testb/aa.textでいいでしょうか? 実行すると java.lang.NullPointerException Exception in thread "main" java.lang.IllegalArgumentException: input == null! という例外が出るんですが
- 718 名前:デフォルトの名無しさん mailto:sage [2008/06/01(日) 23:35:26 ]
- フォルダ云々じゃなくてまずはパッケージの概念と実行する時のクラスパスに関して勉強して来い
お前の質問じゃ、それでもいいともそれではダメともどちらでも取れる
- 719 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 00:11:45 ]
- >>717
釣りなのか?なんか笑える
- 720 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 00:32:34 ]
- >>717 説明の文章だけ読むと ../testb/aa.txt
- 721 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 03:38:56 ]
- * Returns a shallow copy of this <tt>ArrayList</tt> instance. (The
* elements themselves are not copied.) public Object clone() { ArrayList<E> v = (ArrayList<E>) super.clone(); v.elementData = Arrays.copyOf(elementData, size); これ、ディープ・コピーじゃないんですか? 以前のソースがないので分かりませんが、clone()の実装がバグってるんでしょうか。
- 722 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 05:41:04 ]
- >>721
6のArrayListの実装? どうみてもシャローコピーなんだが。 super.clone() は継承元ではオーバーライドされていないからObject#clone()呼び出しと同義だし、 v.elementData = Arrays.copyOf(elementData, size); は単に各要素への参照値をクローンしたArrayListの方にコピーしているだけでしょ? コメントにも要素自身はコピーされないって書いてあるやん。
- 723 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 07:56:08 ]
- v.elementData = Arrays.copyOf(elementData, size);
これでしょ問題なのは。 v.elementData = this.elementData シャローコピーといえば、普通はこうじゃないの? オブジェクト(クラス)がArrayListだから、クラスの意味からすれば オブジェクトのフィールドにある配列の内容の方もコピーするってのは分からなくもないけど、 シャローコピーは配列の参照だけコピーで内容はやんないんじゃなかったか。
- 724 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 07:57:04 ]
- > v.elementData?=?this.elementData
> > シャローコピーといえば、普通はこうじゃないの? コピーになっとらんがな。
- 725 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:05:34 ]
- >>723
そもそも > * Returns a shallow copy of this <tt>ArrayList</tt> instance. をわざわざ引用していたり > clone()の実装がバグってるんでしょうか などと言っているところからみて > ディープ・コピーじゃないんですか? は配列のコピーうんぬんの話でなく ArrayList#clone()のことを質問してるんじゃないの?
- 726 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:08:25 ]
- >>724
要素が変更されたらおかしくなるし、確かにコピーになってない。 そうするとコレクションに限っては、cloneの仕様を満たすのは、やっぱこれでいいじゃないの?
- 727 名前:デフォルトの名無しさん [2008/06/02(月) 08:10:54 ]
- これだとコンストラクタと同じだし、cloneを実装したSUNの意図がイマイチわからん。
継承しても、cloneを再実装しようかどうか迷うじゃん。
- 728 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:17:41 ]
- >>727
インスタンスメソッドである事に意味があるんじゃね? コンストラクタは型わかってないと呼べないし。
- 729 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:25:07 ]
- >>728
インスタンスなら、キャストしないといけないから結局はキャスト先の型がわかんないとダメでしょ。 リフレクト使うのもいいけど、そうれなら全て継承元の(ArrayList)のキャストになってしまう。 型分かってんなら、継承していてもいなくても、ArrayListのコンストラクタでいいでしょ。 イマイチわかんないな。 cloneが実装されている標準のクラスはあまりないから馴染みないけど、どういうときに使うんだ?
- 730 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:41:41 ]
- >>729
(T)arraylist.clone() のキャスト先の型Tは T extends Cloneable & List みたいちょっとだけでも抽象化できる。 コンストラクタ呼ぶ時ほど具体的な型名は必要ない。
- 731 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 08:58:55 ]
- >>727
配列の clone() と似た動作を目指しただけだと思うが。 片っ方を変更したら、もう片方も変更されるようなものが欲しければ List#subList(int, int) 使えって言われるだろうし。
- 732 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 14:58:40 ]
- インスタンスメソッドでArraylListであることは最低限保証できるってことだと思う。
それなら、cloneじゃなくてdupとか別の名前でもいい気がしたけど Vectorのころにcloneを実装しちゃったからその名残かな。
- 733 名前:デフォルトの名無しさん [2008/06/02(月) 15:10:46 ]
- Appletが起動したらTextFieldにカーソルが点灯している状態にしたいのですが
教えてください。FrameやWindowはつかってません。
- 734 名前:デフォルトの名無しさん [2008/06/02(月) 15:53:18 ]
- >v.elementData = this.elementData
シャローコピーならこれでコピーされてるでしょ。 どうせコピー元が変更されたり追加されて内部の配列の参照が変更されても、 コピー先はその時点での状態がコピーできればいいんだし。 コピーになってないとかいって、意味わかんないな。 v.elementData = Arrays.copyOf(elementData, size); でも実質同じだから冗長と言えなくもない。
- 735 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 16:21:15 ]
- >>733
検索した ttp://www.alles.or.jp/~torutk/oojava/maneuver/1998/swing/swing_ja.html >また、フォーカスを持つコンポーネントをプログラム中から指定することもできます。JComponentクラスのメソッド、requestFocus()です。 これでいい?
- 736 名前:デフォルトの名無しさん [2008/06/02(月) 17:24:05 ]
- sample.jsp
<%@ page contentType="text/html;charset=Shift_JIS" %> <%! String a=""; %> <% //↓これを書くとjsp:paramで何故かエラー request.setCharacterEncoding("JISAutoDetect"); a=request.getParameter("nam"); %> <html> <head> <title>sample</title> </head> <body> <jsp:include page="include.jsp"> <jsp:param name="param" value="<%=a %>" /> </jsp:include> </body> </html>
- 737 名前:736 [2008/06/02(月) 17:26:02 ]
- include.jsp
<div align="right"> <%= request.getParameter("aaa") %> </div> 実行結果: org.apache.jasper.JasperException: An exception occurred processing JSP page /sample.jsp at line 16 (16行目は<jsp:include page="include.jsp">の行です) 何故かjsp:includeでUnsupportedOperationExceptionになるんですが。 <jsp:include page="include.jsp" />と閉じると何事も無く実行され、 request.setCharacterEncoding("JISAutoDetect");をコメントアウトしても実行できます。 なぜでせう?
- 738 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 18:15:28 ]
- >>734がすごいことを言っている件
- 739 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 18:24:31 ]
- super.clone();使ってるから
v.elementData = this.elementData の代入すら必要ないんじゃないの?
- 740 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 18:28:47 ]
- 何かアプリケーションを作りたいと思ってJavaで開発用エディタを作ったのですが、
これを個人毎に文字の色とかコンパイラのURIとかの各種情報を保存して 起動時に設定するようにしようかと思ったのですが、 こういう設定の保存ってどういう形式で行うのが普通なのでしょうか? 「設定.txt」とかいう形で保存するのも何か変な気がします。
- 741 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 18:54:04 ]
- サンプルプログラムでは、*.propertiesが多いね
- 742 名前:デフォルトの名無しさん [2008/06/02(月) 19:11:39 ]
- そのclone()についてなんですけど、java.lang.NumberやStringなどはclone()実装されてないのがよく分からないんです。
コレクションの方はclone()あるのに、値の方はなんでないんでしょうか。 それもthis用のコンストラクタとでも言うのか、それ用のコンストラクタすら用意されてないのもあり、 もしコピーするならかなり遠回りな操作をしなければならないですよね。 イミュータブルだとしても、classもfinalのも多く、設計上に意図としてはインスタンスのコピーはするなってことなんですか?
- 743 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:22:01 ]
- > イミュータブルだとしても、classもfinalのも多く、設計上に意図としてはインスタンスのコピーはするなってことなんですか?
Immutableなオブジェクトのコピーとって何したいの?
- 744 名前:デフォルトの名無しさん [2008/06/02(月) 19:31:05 ]
- 内部が変更できるかどうかじゃなくて、インスタンスのコピーの話なんですけど、ごっちゃにしてませんか?
- 745 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:33:23 ]
- 何したいとかじゃなくて、そもそもそのAPIがないなら何も出来ないでしょw
- 746 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:40:30 ]
- >>740
サラッとスゴい事をおっしゃる。
- 747 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 19:47:31 ]
- >>742
cloneを実装してないのは、たぶんイミュータブルなインスタンスをコピーできても、うれしいことが特に無いからじゃないかな finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない
- 748 名前:デフォルトの名無しさん [2008/06/02(月) 20:02:07 ]
- >finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない
こういうこと平気で書いちゃうあたりが、イミュータブルとかextendsとかを分かってないんだろうね。 インスタンスとcloneも同じく、ごっちゃにしてるんだろうw
- 749 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:02:09 ]
- >>742
もし仮にNumberやStringをコピーできるとしたら、それがどんな場面で役に立つ?
- 750 名前:デフォルトの名無しさん mailto:sage [2008/06/02(月) 20:04:22 ]
- >>741
ありがとうございます! propertiesをキーワードにググって実装してみたところ出来ました! >>746 すいません、やっぱり.txtで保存するのはおかしいですよね; 直感的に変なのは分かるのですが、テキストファイルだとデータと値の関係がないとか、 そういうことが.txtを用いない理由なんでしょうか?
- 751 名前:デフォルトの名無しさん [2008/06/02(月) 20:29:52 ]
- >>749
仮にも何も、もう設計上出来ないんだよ。 まあ書いてもいいんだけどね(笑) インスタンスをコピーするってことはどういうことなのかをよく理解すればいいんじゃないの?
- 752 名前:デフォルトの名無しさん [2008/06/02(月) 20:30:47 ]
- >finalは、イミュータブルな性質を維持するために必要なことだから、仕方ない
こういうこと平気で書いちゃうような人だしなぁw
|

|