Java言語

Javaの文法などに付いて

文法

三項演算子

英語だと、Ternary operation
使いすぎると、コードが読みにくくなりますが、単純な処理など1行で済むので使った方がいいケースも有ります。
コードとかを読むと上級者は適度に使っています。

最初に条件文を書いて?の後に、trueの場合の返り値、コロンでfalseの場合の値を記述します。
条件文?trueの返り値:falseの返り値


文字列が空ならnullを返す
if(value.isEmpty()){
    return null;
}else{
    return value;
}
ですと次のように書き換えれます。
return value.isEmpty()? null:value;

if(isOrMode()){
    filter=initialFilter+" || "+filter; 
}else{
    filter=initialFilter+" && "+filter;
}
は次のように書き換えれます。(少し長いので不向き)
filter=isOrMode() ?(initialFilter+" || "+filter):(filter=initialFilter+" && "+filter);

transient

Serializeの直列化の対象から外すという意味です。
メソッド呼び出し時に一時的に内部で使用している変数などに指定します。
変数の場合は気にしなくてもいいと思いますが、クラスとかだとシリアライズ時に問題が起きることもありますので、注意したいです。
transit int insideCounter;

シングルトン

シングルトンとは、クラスのインスタンスを1つに保つための方法です。
インスタンスを1つに保つことでメモリ節約出きたり、インスタンスの生成にかかる時間を節約出来ます。

JavaでのSingletonは、enumを使った以下のようなのが定番になるでしょう。Google Collections Libraryのソースコード中でも見ました。
単純にprivateとかで、シングルトンすると、シリアライズとかで問題が起きるらしいですし。

private enum IsNotEmptyPredicate implements Predicate<String> {
INSTANCE;


public boolean apply(String o) {
    return !o.isEmpty();
}
@Override public String toString() {
    return "IsNotEmpty";
}
}

注意するべきクラス

StringBufferとStringBuilder

JDK1.5以降は基本的にはStringBuilderを使うべき。こちらの方が高速。
ただしStringBufferはスレッドセーフなので、複数のスレッドから書き込む可能性がある場合はStringBufferを使うべき


スニペット

全角スペースを含むホワイトスペースで文字を分割する

line.replace("\u3000"," ").split("\\s+")
Comments