タグ

javaに関するvoidy21のブックマーク (274)

  • Javaメソッドの呼び出し元をツリー表示するスクリプト - うなの日記

    JavaClassを使って指定メソッドの呼び出し元を探索しツリー表示するスクリプトを書いてみました。 引数で指定されたパス以下の*.class,および*.jarに含まれるクラスファイルを解析し、 メソッドの呼び出しコードを収集。 収集した情報を再帰的に探索し、呼び出し元メソッドをツリー形式で出力します。 使い方 $ ./caller.rb <クラスが置かれたディレクトリorJarファイル> <呼び出し元を探すメソッド> 呼び出し元を探すメソッドは「<メソッドが定義されたクラスのFQCN>#<メソッドのディスクリプタ表記>」で指定します。具体的には以下のような形になります。 java.Util.ArrayList#indexOf(Ljava/lang/Object;)I クラスが置かれたディレクトリ or Jarファイルは、「;」区切りで複数指定可能です。 具体例 ↓のようなクラスがあったと

    Javaメソッドの呼び出し元をツリー表示するスクリプト - うなの日記
  • JavaのSwitch構文を高速化する方法。 - kensir0uのしくみ

    Switchを使うと以下の二つの命令のどちらかがコンパイラによって生成される。 lookupswitch - switch文のcase式の値が不連続である場合値を探しながらジャンプ先を探す。 tableswitch - switch文のcase式の値が連続である場合キー値をindexとしジャンプ先アドレスを値とする配列を作り高速にジャンプする。 つまり、特に問題がないかぎり、値を連続で定義するほうが、高速化できそうだ。 全然関係ないけども、下記の書き方はコンパイル可能。 int l = 1 ; l |=l ;

    JavaのSwitch構文を高速化する方法。 - kensir0uのしくみ
    voidy21
    voidy21 2010/02/04
    >つまり、特に問題がないかぎり、値を連続で定義するほうが、高速化できそうだ。
  • 私がJavaのバイトコードをJavassistで操作する時

    最近、既存コードのテストコードを書きまくっています。 その中で、Easymock(classExtension)などを用いてMock化している場合に、 finalクラスをMock化できず困っていました。 何かいい方法がないかなと思っていたらhudsonの開発者である川口さんが jaavassistを利用してfinalを除去しているという記事があり、 なるほどと思って自分もその方向で対応を行うことにしました。 その際に「なぜテストを書くのか」「どうしてそんな書き方をするのか」 ということを色々考えていたので、簡単に脳みそを整理してみます。 バイトコードが使われるとき 主にフレームワーク内部やIDEで利用されている技術と聞いています。 つまり大多数の一般的な開発者には使われないという認識です。 なぜテストにおいてバイトコード操作やリフレクションを使うのか 私の主観としては、リフレクションやバイ

    私がJavaのバイトコードをJavassistで操作する時
    voidy21
    voidy21 2010/02/04
  • 型パラメータつきクラスの中から指定された型パラメータを知る方法 - Skirnirnismal

    型パラメータつきクラスHoeがあるとして、指定された型パラメータをHoeクラスの中から知る方法。 public class Hoe<E> { private Class<E> type; public Hoe(E... e) { @SuppressWarnings("unchecked") Class<E> type = (Class<E>) e.getClass().getComponentType(); this.type = type; } public Class<E> getType() { return type; } } こうすると、具体的な型パラメータを取得できる。 例えば Hoe<Fuga> hoe = new Hoe<Fuga>(); という文があった場合、hoe.getType()はFuga.classになる。 かなり裏技的だけど。

    型パラメータつきクラスの中から指定された型パラメータを知る方法 - Skirnirnismal
    voidy21
    voidy21 2010/02/03
  • 萌えくりぷす - その2 - - ( ꒪⌓꒪) ゆるよろ日記

    id:warufuzaketaichi や id:torazuka さんのおかげで、こんなに素晴らしい開発環境になりました。 使った画像はこちらです。すばらすぃです! Eclipseたんスプラッシュの加工前画像 - 虎塚 Twitter / taichi: 起動時のスプラッシュやらアイコンやら、ちょっと変えて ... via kwout 悔しかったので、アスペクト比を保ったままリサイズするようにしました。(せめてもの抵抗w) [f:id:yuroyoro:20100125140739p:image] 多分というか確実に、メモリ漏れてますorz [http://gist.github.com/285613:title]

    萌えくりぷす - その2 - - ( ꒪⌓꒪) ゆるよろ日記
  • オブジェクト指向と型システムの狭間で例外を考える - プログラマーの脳みそ

    「検査例外はアジャイルやオブジェクト指向の考えに反するという事実」について一部誤解あり - じゅんいち☆かとうの技術日誌のあんまりな釣りタイトルにやれやれだぜ、と思いつつも非チェック例外多用作戦のトレードオフ認識 - 都元ダイスケ IT-PRESSでツッコミたかったことが突っ込まれてしまってるので、しょうがないのでオブジェクト指向と型システムの話でもしよう。 Javaの静的型システム ≠ オブジェクト指向 僕が10年ほど前、Javaを使い始めてからしばらくたってやっとオブジェクト指向プログラミングが掴めて楽しくなってきた頃合、これこそがオブジェクト指向なのだと誤解をしていたころ、オブジェクト指向は型がチェックできてなんぼだと思ってた。 javascriptのプロトタイプ型のオブジェクト指向に憤り、「あんなものはオブジェクト指向ではない」などと思うのがJavaプログラマ的中二病というやつだが

    オブジェクト指向と型システムの狭間で例外を考える - プログラマーの脳みそ
    voidy21
    voidy21 2010/01/17
  • 非チェック例外多用作戦のトレードオフ認識 - 都元ダイスケ IT-PRESS

    まず、以下に持論を展開するにあたって、自分の立ち位置を明確にしよう。自分は「Webアプリケーション開発者」としてではなく「JavaによるWebアプリではない(デスクトップアプリ,コマンドラインアプリ,ライブラリ)アプリの開発者」として語る。まぁ、自分に一番馴染みの深いプロダクトとしてJiemamyが挙げられるわけだが、こいつはWebアプリじゃない。Eclipse上で動くアプリケーションであり、そしてMaven2によって呼ばれるCLIアプリでもあり、また、クラスライブラリである。 この視点からJavaにおけるチェック例外と非チェック例外の話を再び。 Javaにおけるthrows句は、メソッドシグネチャの一部であり、インターフェイスにも現れる情報である。今まで「Javadocは仕様だ」と言い続けて来たが、正確にはインターフェイス(シグネチャ+Javadoc)が仕様だ。*1 検査例外が使いにくい

    非チェック例外多用作戦のトレードオフ認識 - 都元ダイスケ IT-PRESS
    voidy21
    voidy21 2010/01/17
  • http://twitter.com/yoshiori/statuses/6696565645

    voidy21
    voidy21 2010/01/16
  • 非同期処理と疎結合ができる「メッセージング」の常識

    非同期処理と疎結合ができる「メッセージング」の常識:企業システムの常識をJBossで身につける(5)(1/4 ページ) 企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎! 企業システムでは、さまざまなデータを使ってさまざまな処理が行われています。また、システムの複雑化・高速化により、データや処理が複数システムにまたがることもあります。システムが多様化されることにより、一部に変更や障害が発生しても全体にはできる限り影響しないように、各システムの連携は“疎結合”であることが望まれています。そこで、これらの連携手段として「メッセージング」というものがあります。 今回は、メッセージングに関連するJav

    非同期処理と疎結合ができる「メッセージング」の常識
    voidy21
    voidy21 2010/01/15
  • IBM Developer

    IBM Developer
    voidy21
    voidy21 2010/01/15
  • JavaでFlashファイルを生成する - きしだのはてな

    JavaSWFを使ってSWFファイルを生成してみました。 JavaSWFは、名前のとおりJavaからSWFファイルを読み書きできるライブラリです。 http://sourceforge.net/projects/javaswf/ ソースはこんな感じ import com.anotherbigidea.flash.movie.*; import com.anotherbigidea.flash.structs.*; import java.io.IOException; public class NewClass { public static void main(String[] args) throws IOException{ //枠線 Shape sh = new Shape(); sh.defineLineStyle(3, new Color(0, 255, 0)); sh.set

    JavaでFlashファイルを生成する - きしだのはてな
  • Xmas Java - よねのはてな

    以下のsourceはcompileが通るでしょうか? public class Xmas { <T> T func1() { return this.func2(); } <T> T func2() { return null; } } 試しにコンパイルしてみると yone098>javac Xmas.java Xmas.java:6: 型パラメータ <T>T を判別できません; 型変数 T (上限 T,java.lang.Object) の固有の最大インスタンスが存在しません。 return this.func2(); ^ エラー 1 個 EclipseでOKなのに、mvnでコンパイル出来ないという経験した方もいるのではないでしょうか。 型パラメータTくらい、判別出来るじゃんと思いますが、出来ない子です。 すぐ分かった方は、SunのJDKマニアですね。 こういうときは、以下のように変更し

    Xmas Java - よねのはてな
    voidy21
    voidy21 2010/01/08
  • 「仕様」と「実装の詳細」(2) - 都元ダイスケ IT-PRESS

    繰り返す。Fooクラスを利用するMainクラスを書く時、XはFooの「仕様」に依存すべきであり、Fooの「実装の詳細」に依存すべきではない。 public class Foo { public String bar; public Foo(String bar) { this.bar = bar; } public String getBar() { return bar; } } public class Main { public static void main(String[] args) { Foo foo = new Foo("hoge"); System.out.println(foo.bar); // (1) System.out.println(foo.getBar()); // (2) } } 上記のクラスはbarフィールドがpublicである。しかしFooのインターフ

    「仕様」と「実装の詳細」(2) - 都元ダイスケ IT-PRESS
    voidy21
    voidy21 2010/01/07
  • 2010年現在のアクセスレベルの限界 - プログラマーの脳みそ

    前提条件を破った場合、どのような挙動をするのか? - 都元ダイスケ IT-PRESSで言及をもらったので 現代は4つのアクセスレベルでの可視性制御の限界が囁かれていて、打破するためにいろいろ模索しているところ はてなブックマーク - Nagiseのブックマーク / 2009年12月24日 についてちょっと具体的な話をしておこう。 このブックマークコメントは可視性と公開APIと非公開(内部)APIと - 都元ダイスケ IT-PRESSに対してつけたものだった。このエントリは設計する際にJavaの4つのアクセスレベルをどう使い分けるかを書いた良エントリだと思う。 privateで困る例:自動テスト JUnitといった自動テストコードを書くことを考えてみよう。クラス内だけで再利用される冗長コードをprivateメソッドとして括り出した。このメソッドが単体独立で動作検証が可能なのであれば、そのI/

    2010年現在のアクセスレベルの限界 - プログラマーの脳みそ
  • 小数点の計算をやるからといってすぐにfloatやdoubleを使ってはいけない - かとじゅんの技術日誌

    おつかれさまです。 型を選ぶというのはプログラミングの基礎中の基礎ですが、以外に開発の現場でも注意が必要なのが、floatとdoubleの精度の問題があります。これぐらい当然と思っていたのですが、最近よく耳にしますので、あえて言及w これらの型の目的が科学技術計算のための用途。多少誤差が生じても高速に演算をすることを目的としています。グラフィックなどの描画系とかですかね。 このように、float型やdouble型は誤差を含む可能性があるため、科学・工学計算で多少の誤差は許容できる場合はよいのですが、金融・会計分野のように正確な値が要求される計算には向きません。 どうしても正確な値が欲しい場合は、BigDecimalクラスを使用することになります。基データ型のdoubleやfloatと比較すると不便かつ低速ですが、精度が保証されており、丸め方も指定できます。 ここで言及されているように、お

    小数点の計算をやるからといってすぐにfloatやdoubleを使ってはいけない - かとじゅんの技術日誌
    voidy21
    voidy21 2010/01/06
  • 仕様(インターフェイス)と実装の詳細 (1) - 都元ダイスケ IT-PRESS

    APIの公開/非公開が意識できるようになると共に、「仕様(インターフェイス)」と「実装の詳細」を意識できるようになるとよい。 このクラスの公開APIはどれか、非公開APIはどれか このクラスの仕様(インターフェイス)はどれか、実装の詳細はどれか という2つの角度でクラスをとらえる。前者については昨日のエントリでも示した通り、可視性がpublic,protectedなものが公開APIであり、その他は非公開APIである。機械的に判断できますね。では後者についてはどう判断すればいいか? 注:下の例で「このクラスのインターフェイスは?」と聞かれると単純に「Baz」と答えるかもしれない。がここで言いたいのは「Bazを介したFooのインターフェイス」ではなく「Foo自身が純粋に外部に公開する仕様としてのインターフェイス」のこと。インターフェイスとは何か?についてはinterfaceについて気出して考

    仕様(インターフェイス)と実装の詳細 (1) - 都元ダイスケ IT-PRESS
    voidy21
    voidy21 2010/01/05
  • 堅牢なコーディングルールを策定する方法(2) - 都元ダイスケ IT-PRESS

    いやー、なんか怖い人(笑)が見てるようだ。突っ込み激しそうぜよw さて、前回言っていた「判断ロジック」についての答えは各自考えてみただろうか? 各方面の反応を見ると「1〜4どれでしょうか*1」という問いにすり替わっちゃってる気がするけど、テーマは「1〜4を決めるロジックを考えてください」なんだ。書き方悪かったもしれんw まぁつまり、昨日のエントリの時点では1〜4どれでもないのですよ。判断ロジックがないので。 というわけで題。アプリケーションレベルでのバグとは「実際の挙動が仕様と違うとき」ですね。挙動があるべき姿(=仕様)と違う時にそいつバグとするのが妥当です。そしてそれはコードレベルでも同じ基準で良いんじゃないでしょうか。 じゃあ、仕様とは何か。Javadocコメントですよ。Javadocがないとバグの定義さえもできないんです。だから口酸っぱくJavadoc書けとw*2 まぁつまり「Ja

    堅牢なコーディングルールを策定する方法(2) - 都元ダイスケ IT-PRESS
    voidy21
    voidy21 2010/01/05
  • 前提条件を破った場合、どのような挙動をするのか? - 都元ダイスケ IT-PRESS

    「Nullチェックされている前提の処理」とJavadocに書いたとき、「throws NullPo…」は書くんだろうか。んー、コード上は発生しうるけど、実際発生しないから不要なのかな はてなブックマーク - u1tnkのブックマーク / 2009年12月29日 まぁ、このブログで書いている話は、あくまでも「俺式」ということをご理解いただいた上で。(ここに書いた事が全て、って訳じゃありません。他にも色々ポリシーはあると思うが、自分はこれが一番良いと考えている。) 自分の考えは、契約プログラミングに基づいてます。DbC(Design by Contract)って奴ですね。 あるメソッドが「Nullチェックされている前提の処理」というのは、引数にnullは入ってこない前提、ということですよね。そしてJavadocを書くということは恐らくこのメソッドは公開API(publicかprotected)

    前提条件を破った場合、どのような挙動をするのか? - 都元ダイスケ IT-PRESS
  • 和暦を扱う

    和暦を利用する java.util.JapaneseImperialCalendar J2SE 6.0 (開発コード名:Mustang)において、和暦を扱う新たなカレンダークラスがAPIに追加されました。BugParadeにおいて、BugID:4609228として登録されているRFE(改善要望)が実装されたものです。なお、このクラスはデフォルトアクセス(パッケージローカル)なので、アプリケーションから直接扱うことはできません。Calendarクラスを介して扱います。 JDK6.0 b50での利用例 和暦を使用したサンプルプログラムを紹介します。画面イメージは以下です。 このプログラムのソースコードは以下です。 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.D

    voidy21
    voidy21 2009/12/30
    こんなのあるのか!
  • Javaリフレクションメモ(Hishidama's Java Reflection Memo)

    Javaでは、クラス生成やメソッド呼び出しをソース上に直接書いてコンパイル時に決定されるだけでなく、文字列(クラス名)を使ってクラスを生成したり、 メソッド名の文字列を使ってメソッドを呼び出したりすることが出来る。 クラス(インスタンス)生成 [/2015-04-26] Classのメソッド [/2021-03-21] instanceof [2007-02-16] Classからのインスタンス生成(非推奨) [/2018-04-30] インスタンス生成 [/2013-08-06] 総称型による限定 [2007-05-02] 内部クラスのインスタンス生成 [/2008-02-10] メソッド呼び出し staticメソッド実行 [/2017-07-23] メソッド実行(引数なし) [/2017-07-23] メソッド実行(引数あり) [/2017-07-23] 可変引数メソッド [/2015

    voidy21
    voidy21 2009/12/30