Runnable と Callable

クラスのインスタンスが他スレッドで実行することを想定してデザインされている、という意味で、CallableのインターフェイスはRunnableに似ています。
両者の違いは、Runnableは戻り値の指定が出来ず例外としてRuntimeExceptionしかスローできないのに対し、Callableは戻り値を指定可能でどんな例外もスローすることができる点です。

ScheduledExecutorService(遅延実行)あたり【Java】

scheduleメソッドとか、scheduleAtFixedRateあたりを調べておきました。

scheduleの方は最初の遅延時間を引数で指定できます。

scheduledAtFixedRateは、最初の遅延時間、インターバルが指定できます。そしてどちらもその遅延時間、インターバルの時間単位をTimeUnit列挙型で指定するだけです。

 

実行する時はこんな感じでシングルスレッドを用意して、

ScheduledExecutorService execTest = Executors.newSingleThreadScheduledExecutor();

 

execTest.schedule(ラムダ式, 時間, TimeUnit.SECONDS);

 

終える時にはexecTest.Shutdown();

 

名前が長いので覚えにくいです。

enumのサンプルコード【Java】

先ほどの投稿の下にでもサンプルコードを添付しようと思ったら、一回「見たままモード」で書いた記事は、左上の所で「はてな記法モード」を選択できなくなっていることに気づきイライラ。
列挙型は使用されるときに一度だけコンストラクタが走って、カッコ内の値を渡します。A,B,Cの値が出力され、最後にMainのprintln(Sample.A);でもう一度Aの値が出力。

というわけで下記の通り。

package test;

public enum Sample{
	A("Helloo"), B("heelo"), C("hellllo");
	private final String value;
	private Sample(String value) {
		System.out.println(value);
		this.value = value;
	}
	@Override
	public String toString() {
		return this.value;
	}
	
	
}
package test;

public class Test {

	public static void main(String[] args) throws Exception{
		// TODO 自動生成されたメソッド・スタブ
		
		System.out.println(Sample.A);
		
		

	}

}

これを実行すると、コンソール表示は
Helloo
heelo
hellllo
Helloo
となります。

Javaの列挙型は、クラスである【Java】

JavaEnum(列挙型)ってやつは、クラスなのです。Javaをずっとやっていらっしゃる方は、「そりゃそうだろ、java.lang.Enumを継承(extends)してるんだもの」とか、「Values()とかValueOf()っていうメソッドもあるやん」って思うかもですが、CやC++C#ではクラスとして扱っていないそうです。

匿名クラスにはコンストラクタを指定できない【Java】

名前が無いのがコンストラクタの特徴なので、名前だけのコンストラクタは使えない。

コンパイルエラーになる。

初期化する時は、初期化子 { } でオナシャス!

ComarableとComparator 似てるけど、どう違うん?【Java】

Javaでよく使う、ComparableとComparator、似てて混乱しますよね。僕はしてます。なので、このページで整理していこうかと思います。

Java.langパッケージはプログラムを作成する上でよく使用される、基本的なクラスをまとめたものです。頭にimport文で明示しなくても勝手に入ります。

そのjava.langの中にComparableはあります。比較できるやつですよーっていう目印になって、実際に、何をどう比較して順番を変えたりするのか?っていうところを実装すればよいわけですね。

その比較条件をComparableのcomapareTo(T target)メソッドの中に書いていくようになっています。

 

じゃあ、Comparatorは?って気になっていたので、ちょっと調べてみました。

一般的な使い方は、こんな感じです。

比較条件をComparatorの中のcompare(T a1, T a2)メソッドで引数2つ受け取り、それぞれのどの値を評価すれば1、-1、0(等価)になるかを返す、っていう感じです。

それを、Collectionsのsortメソッドの第一引数を比較対象、第二引数に比較方法(Comparatorのインスタンス)を指定すれば良いようです。