1 名前:デフォルトの名無しさん [04/04/09 22:24] 統合開発環境Eclipse用プラグイン開発に関する質問と回答です。 Eclipseの使い方や、プラグインの使い方は、 このスレでは扱いませんので、↓のほうへどうぞ。 pc5.2ch.net/test/read.cgi/tech/1076074293
528 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 22:13:23 ] 前々からおもったんだが、継承させたくないならなぜclassをfinalにしないのだろうか。
529 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 22:24:33 ] 自分らが拡張するときに不便だから
530 名前:デフォルトの名無しさん mailto:sage [2006/11/21(火) 22:48:33 ] 継承してメソッドをオーバーライドすればできたと思うが。>Table
531 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 02:00:29 ] >>528 virtual信者か。 finalに関する都市伝説は知ってるか? finalの使い方を勘違いしている香具師がよくいるからな。 finalは主に不変クラスや定数を宣言するときにつかうものであって 継承やオーバーライドを禁止するためだけに使うべきではない。
532 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 02:12:07 ] >>531 信者じゃなくて素人だよ。思いつきで書いた。 finalの都市伝説とかよくしらないんだけど なんで継承の禁止に使っちゃだめなの?
533 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 03:07:25 ] パフォーマンスに関する都市伝説はよく聞くが
534 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 03:14:37 ] >>531 final を継承やオーバーライドを禁止するために使うのは別にかまわないと思うが? 「final の都市伝説」って、このことを指して言っているのだと思うが、 Javaの理論と実践: パフォーマンスの都市伝説 www-06.ibm.com/jp/developerworks/java/030627/j_j-jtp04223.html この記事には、「継承やオーバーライドを禁止するためだけに使うべきではない」とは書いてはない。 この記事で final に関していっているのは、「パフォーマンス目的での final 指定はすべきではない」と 言うことだけ。 むしろ、「継承を想定せずに設計された複雑なクラスを final にすることも理にかなっています」と書いて ある。
535 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 03:27:46 ] いやまて。既存の一般知識だけで頭ごなしに否定するのは良くない。 531の興味深い知見を聞こうではないか。
536 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 03:27:52 ] >>530 >継承してメソッドをオーバーライドすればできたと思うが。>Table できるが,やるならリスクを理解すべきでしょ. ここで質問するってことはリスク評価できてないんだから, 安易にこうすれば出来るとか言ってしまうのはいかがなものか. >>531 >継承やオーバーライドを禁止するためだけに使うべきではない。 はつみみです.
537 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 10:01:04 ] Eclipse3.0.xのインストーラってどこで落とせばいいんですか? 公式見てもさっぱり分かりません・・・
538 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 10:09:31 ] >>537 なんでそんな古いバージョンを?
539 名前:537 mailto:sage [2006/11/22(水) 12:56:21 ] >>538 RMIを使うために3.0系じゃないと使えないみたいなので 3.1.xだとWindow→設定→Javaの中にRMIの設定はありませんでした
540 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 14:27:13 ] >>539 そんな制約はない。 rmicの実行と、実行時のRMI用のシステムプロパティの設定さえできれば どんな開発環境でだってできる。 あと、スレ違いなので別スレ池。Java初心者スレとかでいいんじゃね?
541 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 16:52:03 ] >>534 > >>531 > final を継承やオーバーライドを禁止するために使うのは別にかまわないと思うが? 使うのはかまわないが、「だけ」に使うのは考え直せってことだろう
542 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 16:53:24 ] つまりこういうことだろう。 継承やオーバーライドを禁止するときは 単にそれが目的ではなく、あくまで手段であるということ。 template methodや不変クラスを作るという目的を もって使えということだろう
543 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 17:47:34 ] なにそれ.単なる言葉遊びじゃないの? 継承の禁止そのものが目的なんて現実的にあり得ないでしょ. 誰だって何かを期待してfinalつけるわけで.
544 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 20:33:28 ] Java言語規定より www.y-adagio.com/public/standards/tr_javalang/8.doc.htm#54727 > クラスの定義が完了しており,これ以上サブクラスを要求又は必要としない場合,クラスをfinal宣言することができる。 サブクラスを禁止するためにfinal宣言するのは、言語仕様に沿った正しい使い方だと思うがどうか。
545 名前:デフォルトの名無しさん mailto:sage [2006/11/22(水) 21:02:21 ] だから、そうじゃない 提供してる側が「やっぱ拡張してーや」って時に ごにょごにょやるために、わざとfinal外してるだけ
546 名前:544!=541!=542 mailto:sage [2006/11/22(水) 21:18:05 ] >>545 ああ、そういうことなら何もいうことはないよ。 継承を禁止するためにfinal宣言するのは正しいし、 自分たちには許可するけど余所の連中が継承するのを禁止するためにSWTみたいな方法をとるのも、まあいいと思う。 >>531 のせいで変な流れになったな。
547 名前:デフォルトの名無しさん mailto:sage [2006/11/23(木) 20:09:46 ] >>540 わかりました、そっちで聞いてきます
548 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 20:28:54 ] どうして単独のSWT上のCanvasでマウスホイールイベントを取得するとうまくいくのに、 プラグイン開発でViewPartに配置したCanvasでマウスホイールイベントを取得すると 反応しないのはなぜなんだぜ?
549 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 20:54:52 ] ソースさらすよろし
550 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 20:59:42 ] うちでは問題ありませんなんだぜ。
551 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 21:11:40 ] CSVエディタを作ってたがもう辞める。 SWTのテーブルにはうんざりだよ。
552 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 00:04:37 ] これでダメ。助けて、パパ〜〜〜〜〜 public class ViewPart1 extends ViewPart implements Listener{ ...[中略]... @Override public void createPartControl(Composite parent) { canvas = new Canvas(parent, SWT.None); canvas.addListener(SWT.MouseDown, this); canvas.addListener(SWT.MouseHover, this); canvas.addListener(SWT.MouseDoubleClick, this); canvas.addListener(SWT.MouseWheel, this); } ...[中略]... public void handleEvent(Event event) { System.out.println(event); }
553 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 00:06:13 ] 「これでダメ」じゃわかんねか。 SWT.MouseWheelだけイベントが取得できず、それ以外はちゃんとSystem.out.printlnされる
554 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:05:22 ] public void createPartControl(Composite parent) { parent.setLayout(new FillLayout()); canvas = new Canvas(parent, SWT.NONE); canvas.addListener(SWT.MouseWheel, new Listener() { public void handleEvent(Event event) { System.err.println("hage"); } }); } でうまくいく俺は勝ち組。
555 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:29:25 ] レイアウトあるね
556 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:57:19 ] だめだ。かなり負け組み感ただようよ。 ちなみにこれだとうまくいきやがるぜ、baby(赤ちゃん) public class SWTScroll { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); Canvas canvas = new Canvas(shell, SWT.NONE); canvas.addListener(SWT.MouseWheel, new Listener(){ public void handleEvent(Event event) { System.out.println("wheel"); } }); shell.open(); while(!shell.isDisposed()){ if(!display.readAndDispatch()){ display.sleep(); } } display.dispose(); } }
557 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 13:28:22 ] おい! public void setFocus() { canvas.forceFocus(); } これを加えたらうまくいきやがりましたよ。 お騒がせしました。今は反省していない