K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]


新規投稿 | 開設者ホームページへ戻る | ヘルプ


[2021] Re:『Java謎+落とし穴徹底解明』の正誤について
返信


投稿者:藤四郎
2017/11/13 19:04:42

Link:
貴重なお時間を割いていただき、改めてありがとうございます。

>JLSから引用するのに勝手に変えるわけにもいかずにこうしたのではないかと
>思います(記憶の彼方ですが…)。
>ここはこのままとさせてください。 

了解しました。

>>X-Draw のソースで DrawWindow.java の l. 110 -
>>    public void mouseDown(int x, int y) {}
>>    public void mouseUp(int x, int y) {}
>>    public void mouseDrag(int x, int y) {}
>>は不要と思われます。
>
>本当ですね。この手の空メソッドはインタフェースにあるシグネチャのうち
>不要なものについて書くのが普通ですが、それにしてもメソッド名から違うので、
>なぜあるのか不明です。正誤表に載せておきます。

僭越ながら、 java.awt.Component に

public boolean mouseDown(Event evt,
                                     int x,
                                     int y)

Deprecated. As of JDK version 1.1, replaced by processMouseEvent(MouseEvent).

というのはあるので、古い版の X-Draw のがまぎれこんでいたのかもしれません。

>>あと、 l. 164 - 
>>    public void resize(int width, int height) {
>>        this.adjustBoundary();
>>    }
>>ですが、今後の拡張を見込んでこのようにされたのでしょうか。
>
>このメソッドは普通に呼ばれていますし、試しに処理を抜いてみたら、
>倍率の計算がされずに何も描かれないので、必要なのではないでしょうか。

すみません、言葉足らずすぎでした。 XDrawCanvas.java の l. 39 - で

            Dimension d = getSize();
            drawWindow.resize(d.width, d.height);

また、 DrawWindow.java の l. 96 - で

    private void adjustBoundary() {
        Dimension canvasSize = canvas.getSize();
        double xScale = canvasSize.width / (this.xMax - this.xMin);
        double yScale = canvasSize.height / (this.yMax - this.yMin);

となっているのは、一見 getSize() の二度手間に思えます。つまり、

    private void adjustBoundary(int width, int height) {
        double xScale = width / (this.xMax - this.xMin);
        double yScale = height / (this.yMax - this.yMin);

        // ...
    }

    public void resize(int width, int height) {
        this.adjustBoundary(width, height);
    }

と (あるいは、いっそ adjustBoundary() の中身を resize() に移動) されなかったのはどうしてかと思いまして。 adjustBoundary() は意味的に引数をとるような処理ではないし、 resize() では今後の拡張次第で別の処理もありうるがこのバージョンでは adjustBoundary() だけ、ということなのでしょうか……。

ところで、 p. 228 「別の方法」についてもお伺いしたいことがありますけれども、長くなるので別稿にて。

あと、自分の投稿
http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=2017&range=1
につっこみですが

        shape.accept(new DrawVisitor(this.drawWindow));

ここは while ループ内なのでここで new するのは効率的にまずいですね。
[ この投稿を含むスレッドを表示] [ この投稿を削除]



[ より新しい投稿] [ より古い投稿]