Java
ちょっと気になったので確認。System.exit()だとfinallyブロックもスルーされるんだったよね! try { System.out.println("a"); System.exit( 0 ); System.out.println("b"); } finally { System.out.println("c"); } 実行結果です。 a「なにこれ、こわい」、…
ドキュメントを見ながら、データストアを使ったカウンターのサンプルを作ってみました。 カウンタの値を格納するクラス データストアでは、Java Data Objects(JDO)の標準インターフェイスを介して、任意のエンティティ(アノテーションが付与されたPOJO)を…
いまさらですが、 Google App Engine For Javaを使ってみましたよ!といってもCodeZine - Google App Engine for Javaを使ってみよう!にしたがって、アカウントを作ってサンプルアプリをデプロイしてみただけですが。ちなみに成果は以下。http://unageanu-te…
javax.annotation.Generatedは、自動作成されたコードを示すアノテーションです。 @Generated( comments="これは自動生成されたクラスです。", date="2001-07-04 12:08:56", value= {} // 何を入れればよいのかよくわからん。 ) public class AutoGenerated …
PrivateModuleを使うと、モジュールに登録されたコンポーネントの公開/非公開を制御できます。 デフォルトは非公開。 コンポーネントは、登録されたモジュール内でのみ利用可能(他のコンポーネントにInject可能)です。 外部から取得しようとするとエラーにな…
Provider Methodsは、Moduleの関数として定義したメソッドを、コンポーネントを取得する際のProviderとして使う機能です。 インスタンス生成時に初期化が必要だったりする場合、Providerでコンポーネントを登録したりしますが、Providerクラスやそのインスタ…
ChildInjectorは、任意のInjectorから、そのInjectorが持つモジュールの内容を継承する子Injectorを作成する機能です。 子Injectorでは親のコンポーネントが参照でき、インスタンスを取得したり、Injectしたりできます。 子Injector作成時にはModuleを渡すこ…
Google Guice 2.0がリリースされたました!ということで、新機能を少しずつ試してみることにします。まずは、Multibindings と MapBindings。 機能 Multibindings,MapBindings は登録した複数のコンポーネントを、SetやMapで取得 or Injectする機能です。Cont…
今日見つけたコード。 for ( String path : paths ) try { // 処理1 // 処理2 } catch (Exception e) { // 例外発生時はログだけ出力して継続 } んー、そこまでしてインデント減らしたいとは思わないかな。
キャメルケースを単語に分割したいときには、「ゼロ幅の肯定先読み」を使うとさくっとできます。 // 分割する文字列 String str = "StringIndexOutOfBoundsException"; // 小文字と大文字の間で分割 String[] strs = str.split( "(?<=[a-z])(?=[A-Z])" ); fo…
","で文字列を分割する。 ただし、"\"に続く","はエスケープされていると見なして分割しない。といったときには、「ゼロ幅の否定的後読み」というのを使えばOKです。 // 分割する文字列 String str = "\\,a\\,a,bb\\,,cc\\,,\\,\\,,"; // 「\に続かない,」で…
オブザーバーの仕組みはjava.util.Observableを使うとさくっと作れますが、パラメータで渡されるイベント?などがObject型になっていてちょい使いにくい。そこで、イベントの型をパラメータで指定できるようにするラッパーを書いてみました。 /** * タイプセ…
固定の値を持つSetをさくっと作りたいとき、よく使うのは以下かな。 // その1 asListの結果を流し込む Set<String> set = new HashSet<String>( asList("mii","tora") ); // その2 インスタンスイニシャライザを使う Set<String> set2 = new HashSet<String>() {{ add("mii"); add("tora"); }</string></string></string></string>…
ServiceLoaderを使うと、リソースを使ったプラグインの仕組みをさくっと作成できます。 サービスインターフェイスと実装を作り、 jar内の「META-INF/services/インターフェイスのクラス名>」にサービス構成ファイルを作成、実装クラスを並べておきます。 後…
Javaでできる筈はないと、なめてかかっていました。ゴメンナサイ。反省してます。 System.out.println( "KuroShiroTora".replaceAll( "([A-Z][a-z]+)", "$1," ) ); System.out.println( "KuroShiroTora".replaceFirst( "([A-Z][a-z]+)", "$1," ) ); 実行結果…
Arrays#deepEquals()で配列要素の再帰的な比較ができます。 Object a = new Object(); Object b = new Object(); Object c = new Object(); // 配列 System.out.println( Arrays.deepEquals( new Object[] {a,b}, new Object[] {a,b} )); // true System.out…
Pattern#quote()で、文字列中の「正規表現で有意な文字」を、全て無効化した正規表現文字列を生成できます。 String regex = "^[a-z]+$"; // 正規表現文字列 String escaped = Pattern.quote( regex ); // 正規表現をエスケープ // エスケープした文字列を正…
ここを参考に、文字列形式のSIDをバイナリに変換する関数を書きました。 /** * SIDをバイナリにする。 * @param sid 文字列形式のSID 例) S-1-5-21-2127521184-1604012920-1887927527-72713 * @return SIDのバイナリ表現 */ public static byte[] sidToBytes…
EnumMapとかいうEnumのみをキーにできるMapがあって、これがEnumの連番を使って高速に動作するらしい。(→Java プログラミング言語 - 列挙型) ということでとりあえず性能を測ってみた。 計測方法 EnumをキーとしたMapのインスタンスをいろいろ作成し、 get、…
Enumには定義順に連番が振られていて、EnumSet#rangeを使って開始位置、終了位置を指定してその範囲のEnumを取り出すことができたりします。 // テスト用の列挙型 enum Test { A, B, C, D, E, F, G, H } public static void main( String[] args ) { // 列挙…
「byte & 0xFF」とします。(→Java FAQ - S007 Q-11 - byte を符号無しとして(unsigned byte として)int と相互に変換するには?より) byte b = -3; int i = b & 0xFF; System.out.println( i ); // 253 解説は、↑のサイトの通りですが、 byteを普通にキャ…
Microsoft の Share Point Server では、APIがストアドプロシージャの形で公開されていて、Java + JDBCでさくっと呼び出せます。例えば、「プリンシパルが属するShare Point グループの一覧取得」であれば「proc_SecListSiteGroupsContainingUser」を使えばO…
次のお仕事ではSQLServerを使うんですが、これのユーザー認証では「統合認証」とかいうのがサポートされていて、ユーザー名/パスワードの指定なしで認証ができるらしい。具体的には「ASP.NETアプリケーションのワーカープロセスを動作させているWindowsユー…
kaisehのブログ - JavaからWin32 APIを簡単に呼べるnlinkを使ってみたより。nlinkを使うと、ネイティブコードとJavaのブリッジをさくっと作成できます。 決められた規則に従ってinterfaceを作成しておけば、 「NLink.create()」で、「interfaceが示すネイテ…
↓のようなメソッドとクラスがあって static <V> Expresion eq( Key<V> key, V value ) { System.out.println( "eq" ); return null; } static class Key<V> {} static class Expresion {} Keyについている型パラメータで、valueに指定できる引数の型をチェックできる</v></v></v>…
次のようなクラスがあって、 class Foo<X> { Foo( Class<X> cl ) {} } 任意のクラスを引数として、境界ワイルドカードを型パラメータとするFooを作成したい場合、以下のように書くとコンパイルエラーになります。 Class cl = null; Foo foo = new Foo( cl ); // コ</x></x>…
instanceofでは、 型パラメータがついていない型(例:List) 上限or下限の指定のないワイルドカードが指定された型(例:List) のいずれかが指定できます。 具体的な型をパラメータとして持つもの(extendsやsuperを含む)は指定できません。 →これは、実行時に型…
↓のような不変なクラスを import java.util.HashSet; import java.util.Set; /** * 名前の集合。不変です。 */ class NameSet { private final Set<String> set; /** * コンストラクタ * @param names 名前 */ NameSet( String... names ) { this.set = new HashSet<String>(</string></string>…
generic array creationより。型パラメータで示される型の配列を作りたい場合、普通にnewして作ることはできないのでリフレクションを使って作っていたのだけど、 // aとbの配列を作りたい。 X a = null; X b = null; // これはエラーになるので・・ // X[] …
推論の元になる引数が複数ある場合、共通の親クラスが使われるのであれぱ、これを使って複数のオブジェクトの共通の親クラスを得ることができるのでは!とひらめいてしまった。 // 引数の共通の親クラスを返す。 static <X> Class test( X... args ) { return ar</x>…