Java

eclipseがJava7に対応しました。

eclipse3.7 SR1 で正式に Java7 への対応がアナウンスされました。 Eclipse Announces Full Support for Java 7 主な変更点は、コンパイラと主要なツール(コンテンツアシスト、クイックフィックスなど)の Project Coin への対応、とのこと。 これでやっと…

Java7 で File クラスもリファクタリングされていました

先日の記事(Java7 で String クラスがリファクタリングされていました - 地平線に行く)に続いて、File クラスを調べてみました。前回ほどの変更はありませんでしたが、それでも着実にソースがよくなっていました。 listFiles メソッド - 新文法の積極活用 …

Java7 で String クラスがリファクタリングされていました

先日、ついに JavaSE 7 がリリースされました! そこで、早速ダウンロードして、Java7 のソースコード(src.zip)を Java6と比較してみたところ、公表はされていないのですが、ちょこちょことリファクタリングされていることがわかりました。 そこで、そのうち…

Java7 の try-with-resources で複数のリソースを扱うときの書き方が、C# の using と全然違う

Java7 の try-with-resources と C# の using は、どちらも同じだと思っていました。 でも、複数のリソースを扱うときの書き方が全然違っていました。 // Java7, ひとつの try の中に複数の宣言を書く try(BufferedReader reader = Files.newBufferedReader(…

一足早く、Java7でアプリを作ってみました!

まだ公式リリース前*1ですが、一足早く Java7 でアプリを作ってみました! PopupTail Java7 で実装した、タスクトレイ常駐型の Tail です(tail -f と同じ機能です)。 ファイルに変更があると、ポップアップでお知らせします。 ログの監視などに、ぜひご利…

eclipse が Java7 に対応するのは、2011年9月ごろの予定

7月28日は Java7 のリリース日*1。 その前にちょっと遊んでみようと思ったら、eclipse がまだ対応していませんでした。 2011年9月ごろ(eclipse 3.7 SR1 で対応)になるそうです。それまでは、IntelliJ IDEAか、NetBeansを使うしかなさそうですね…。 2011年1…

Javaのクラスの半分以上は、引数なしのコンストラクタを持たない

よく使うJavaのクラスは、たいてい引数なしコンストラクタを持っています。 List<String> list = new ArrayList<String>(); Calendar calendar = new Calendar(); でも、引数なしコンストラクタを持たないクラス*1も結構あります。 InputStream inputStream = new FileInputS</string></string>…

JavaとC#の命名規約まとめ (JavaプログラマーがC#でプログラムを書いて引っかかったところ その3)

よくごっちゃになってしまうので、Java と C# の命名規約をざっとまとめてみました。 種類JavaC#(.NET) クラスPascalPascal インタフェースPascal(例:List)"I" + Pascal(例:IList) パッケージ / ネームスペースCamel(例:java.net)Pascal(例:Syste…

内部クラスはエンクロージングインスタンスが無くてもインスタンス化できるのは仕様?

id:backpaper0さんが内部クラスはエンクロージングインスタンスが無くてもインスタンス化できる?と書かれていました。 Inner.class.getConstructor(Outer.class).newInstance((Outer) null); 実行してみたところ、確かにインスタンス化できました。 でも、…

Java5で条件演算子(三項演算子)に仕様変更があった!

昨日の「条件演算子(三項演算子)で、:の左側と右側に共通のインタフェースを持つ別のクラスを書く」についての追記です。C#だと、以下のように条件演算子のふたつの式が共通の型を持っている場合でもコンパイルエラーになりますが、Javaだとちゃんとコンパ…

HTTP Server Anywhere を公開しました

以前、ローカルファイルのまま JavaScript を動かそうとすると、セキュリティエラーにひっかかるということがありました。 ちゃんと Apache とかのサーバを用意して動かせばいいんですが、そこまで手間をかけるのも面倒・・・。そこで、こんなの作ってみまし…

Enumerationを拡張for文で使う

たまに、Java の Enumeration を使ったサンプルを見かけることがありますが、その大半が Iterator と同じようなアクセスの仕方をしています。 NetworkInterface nic = NetworkInterface.getByName("eth0"); Enumeration<InetAddress> nicAddress = nic.getInetAddresses()</inetaddress>…

JavaでPingを打つ

結論:JavaでPingを打つには、外部プロセスを使う。 public class NativeProcess { /** ping のタイムアウト(ms) */ private static String TIMEOUT = "3000"; public static void main(String... args) throws IOException, InterruptedException{ boolean …

バッファリングしない方が速いときもある

前に書いたソースを見直していたら、こんなものがありました。 (指定のデータをクライアントに流すだけのサーブレットです) OutputStream out = new BufferedOutputStream(response.getOutputStream()); InputStream in = new BufferedInputStream(new Byt…

Apacheの設定確認ツール

先日の2ちゃんねる壊滅騒ぎ、そのまとめで気になったのがこの一文。 ・ただ、/test/sss以下の全ファイルのリストがApache(サーバーの内部ソフト)の設定ミスで見れるようになっていた。 モペキチまとめwiki - 2ちゃんねる壊滅? Index of (ディレクトリ内…

Java言語で学ぶデザインパターン入門(マルチスレッド編)読了

「(増補改訂版)Java言語で学ぶデザインパターン入門【マルチスレッド編】」を読み終わりました。 もともと、7月ぐらいに今の仕事でデッドロックが発生したときに買ってななめ読みしていたのですが、今月に入って改めてちゃんと読み直しました。 せっかくなの…

複合代入演算子に対する、ちょっとした勘違い

「x += 3;」は「x = x + 3;」とは違うということを知りました。 きっかけ あるメソッド(foo)の実行時間を確認しようと、こういうソースを書きました。 int sum = 0; for(String arg : args){ long start = System.currentTimeMillis(); foo(); long end = Sy…

錯覚

public static void main(String[] args){ System.out.println // もちろん、ふつうはこんなソースを書いたりはしません。 // でも、いつも当たり前のようにメソッド名の直後にかっこを書いていたら // それがルールであるかのように錯覚してしまっていまし…

Setの実装は、ほとんど中身が空っぽ

Java の HashSet のアルゴリズムを確認しようとクラスの中身を見てびっくり。 HashSet は、処理のほとんどを HashMap へ委譲するだけという超簡単なアルゴリズムでした。 コンストラクタはこんな感じ。 public HashSet() { map = new HashMap<E,Object>(); } メソッド</e,object>…

チェック例外の対処方法

Javaの特徴の一つにチェック例外があります。 IOException や SQLException なんかが代表例です。 自分がチェック例外に遭遇した時にどのように対処しているかをまとめてみました。 throwsする public String read(File file) throws IOException 最も多く行…

Javaでリストと配列を変換、コピーする方法(まとめ)

Javaで、たまにリストと配列を変換したり、コピーしたりするときがあります。 でも意外とやろうとするたびに忘れてしまうので、ざっとまとめてみました。 (解説を分かりやすくするために、ジェネリクスを使用していません) リスト から 配列(変換) publi…

Java7のObjectsクラス

Java7 には Objects クラスが追加される予定になっています*1。 Arrays や Collections みたいな、ユーテリティクラスですね。 ざっと調べてみました (といってもAPIを引用&翻訳*2しただけですが・・・)。http://download.java.net/jdk7/docs/api/java/util…

Propertiesクラスのデフォルトプロパティは使わない方がいいかも

Javaでは、プロパティの設定によく Properties クラスを使います。 このクラスは、コンストラクタで別のプロパティをデフォルト値として指定することができます。 public Properties(Properties defaults) 指定されたデフォルト値を持つ空のプロパティリスト…

「適当にテストする方法」を実践してみた

Hudson勉強会でゆかわさんが紹介していた「Hudsonを用いて適当に?テストする方法」を実践してみました。Hudson study-zenView more presentations from Wataru Yukawa. 自分のプロジェクトでは「データベースアクセス用のクラスにSQLとその実行メソッドを書…

Javaのfor-each文でremoveする

Javaの for-each 文 (拡張for文) 内で remove をする方法はありません。 Sunの解説でもこの点は明記されています。 for-each ループは好きなときに使えます。使用すればコードがわかりやすくなりますが、どこででも使用できるわけではありません。たとえば、…

StrutsのEmailValidatorの挙動に注意

StrutsのEmailバリデータ(正確には、Apache Coomons Validator)を使っていたら、予想外の挙動にすこしびっくりしました。 前後に空白が入ってもいい test@example.com これは、最初に空白が入っていますが、有効と判定されます。 コメントが入ってもいい (…

Java7のAutoCloseable

Java5 から Closeable が実装されていました。 A Closeable is a source or destination of data that can be closed. The close method is invoked to release resources that the object is holding (such as open files). Closeableは、閉じることことの…

Javaのメソッド名によく使われる単語・接頭辞

Javaの標準API(java.*, javax.*)に含まれるメソッド名を分析して、よく使われている単語や接頭辞を抜き出してみました。 これで、もうメソッド名を決めるのに迷わない!はず…。 接頭辞 順位 単語 意味 代表例 出現回数 1 get 取得する List#get() 21198 2 …

攻撃的プログラミングには、例外ブレークポイントが便利

柴田 芳樹さん*1のブログを読んでいて、ふと目にとまったコメントがありました。 結果として、APIの実装コードでは不正パラメータの検査されていない。あるいは、検査はしているが例外をスローすることなく、単純にリターンしている。※ (中略) ※ 検査はし…

GNU-JavaMailでメールを送ると件名が文字化けする

メール送信機能をJavaで実装したところ、なぜか件名が文字化けするという問題にぶち当たりました。 しかも、不思議なことにWindowsからだと大丈夫なのに、Linuxからだと化ける・・・。 最初は文字コード指定を間違えたと思っていろいろ確認したんですが、特…