Java

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からだと化ける・・・。 最初は文字コード指定を間違えたと思っていろいろ確認したんですが、特…

シングルトンインスタンスの static 宣言は一番最後に書く

この前、後輩からきかれてちょっとびっくりしたこと。 一見するとただのシングルトンパターンのクラスが、なぜか動かないと言われました。 public class Sample { private static final Sample instance = new Sample(); private static Map<String, String> map = null; pri</string,>…

FileクラスでNullPointerException

JavaのAPIは、基本的にIO関係でエラーが発生した場合、例外を投げるような設計になっています。 たとえば、FileInputStream はコンストラクタに存在しないファイルを指定した場合、FileNotFoundException を投げてきます。 また、各メソッドも何かあれば IOE…

拡張for文と匿名配列

あまり見かけないけど個人的に好んでつかうJavaのイディオムが拡張for文と匿名配列の組み合わせ。 for(String str : new String[]{"aaa", "bbb", "ccc"}){ System.out.println(str); } テストコードとかで、順番に値をチェックしたいときに使っています。 配…

文字列を == で比較してもいい例

昨日、トリムされているかの判定処理を書いていて気付いたのですが…。 Javaでは、文字列比較に == を使ってはいけないのが常識。 でも、以下の場合は == を使ってもOKです。 /** * トリムされている(両端が空白でない)かどうか判定します。 * * @param str …

SPANやDIVでStrutsのerrorStyleClassみたいなことをする方法

Strutsのhtmlタグは、「エラーがあった時のみ適用されるスタイル」というのを指定することができます。 <html:text property="name" styleClass="textbox" errorStyleClass="textbox error" /> これ普通のSPANやDIVでもできないかな・・・と、いろいろ考えてみました。 結局、思いついた一番ベストな方法はこれ。 <span style="textbox<logic:messagesPresent property="name"> error</logic:messagesPresent>" /> 指定したプロパティ…