忍者ブログ
よくわからないことを調べて解説してみるブログ。

2024

0428
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2015

0623
・instanceofには2つの記法がある
 ①( クラスオブジェクト instanceof クラス)
 ②(インタフェースオブジェクト instanceof クラス) 

 ①においては、クラスオブジェクトがどんな型であっても演算可能だが、
 ②においては、インタフェースオブジェクトと比較対象のクラスに継承関係か実装関係が無いと、コンパイルエラーになる。
 
 そもそもの目的がサブクラス、クラスであるか、実装クラス、実装クラスのサブクラスであるかを問うためのものである。すなわち、継承関係や実装関係を問えるようなオブジェクトを左辺に指定しなくてはならないのは当然であり、それはコンパイラが検証出来る範囲でもある。


拍手[0回]

PR

2015

0620
・FileChannelは、書き込み時にByteBufferを利用できる。
・ByteBufferは、ファクトリメソッドにより生成するが、allocate,wrapの使い方に違いがある。

・allocateの場合


package june20150623;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;

public class FileChannelByAllocated {
	public static void main(String[] args) {
		Path path = new File("test.txt").toPath();
		try (FileChannel fc = FileChannel.open(path, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
			ByteBuffer src = ByteBuffer.allocate(10);
			byte[] bytes = { 't', 'e', 's', 't' };
			src.put(bytes); // putのバイト入力によりpositionが進む
			src.position(0); // 進んだpositionを戻す。

			fc.write(src); // write時にpositionから書き込みされる。この仕様は、Javadoc(http://docs.oracle.com/javase/jp/7/api/java/nio/channels/WritableByteChannel.html)にも記載されている。

		} catch (IOException e) {
			e.printStackTrace();
		}

		try (FileChannel fc = FileChannel.open(path, StandardOpenOption.READ)) {
			ByteBuffer dst = ByteBuffer.allocate(10);
			fc.read(dst);

			System.out.println(new String(dst.array()));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

→実行結果
test
・wrapの場合、

package june20150623;

import java.io.File;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;

public class FileChannelByWarpped {
	public static void main(String[] args) {
		Path path = new File("test.txt").toPath();
		try (FileChannel fc = FileChannel.open(path, StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
			byte[] bytes = { 't', 'e', 's', 't' };
			ByteBuffer src = ByteBuffer.wrap(bytes); // wrapの場合、positionは0を維持する。
			fc.write(src); // write時にpositionから書き込みされる。この仕様は、Javadoc(http://docs.oracle.com/javase/jp/7/api/java/nio/channels/WritableByteChannel.html)にも記載されている。

		} catch (IOException e) {
			e.printStackTrace();
		}

		try (FileChannel fc = FileChannel.open(path, StandardOpenOption.READ)) {
			ByteBuffer dst = ByteBuffer.allocate(10);
			fc.read(dst);

			System.out.println(new String(dst.array()));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

→実行結果
test

拍手[0回]

2015

0607
Format
┗ DateFormat
 ┗ SimpleDateFormat
┗ NumberFormat
 ┗ DecimalFormat
 ┗ ChoiceFormat
┗ MessageFormat

DateFormat,NumberFormatは、ロケール対応のみしており、細かな表現方法は指定できない。

SimpleDateFormat,DecimalFormatは、細かな表現方法が指定可能である。

ChoiceFormatは、数値について範囲ごとの表現を指定可能である。例えば、


		double[] limits = { 1, 2, 3, 4, 5, 6, 7 };
		String[] dayOfWeekNames = { "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" };
		ChoiceFormat form = new ChoiceFormat(limits, dayOfWeekNames);
		ParsePosition status = new ParsePosition(0);
		for (double i = 0.0; i <= 8.0; ++i) {
			status.setIndex(0);
			System.out.println(i + " -> " + form.format(i) + " -> "
					+ form.parse(form.format(i), status));
		}

実行結果
0.0 -> Sun -> 1.0
1.0 -> Sun -> 1.0
2.0 -> Mon -> 2.0
3.0 -> Tue -> 3.0
4.0 -> Wed -> 4.0
5.0 -> Thur -> 5.0
6.0 -> Fri -> 6.0
7.0 -> Sat -> 7.0
8.0 -> Sat -> 7.0

拍手[0回]

2015

0531
・代表的な実装例としては、プリミティブ型のラッパークラス群のvalueOfメソッド群
・new を用いず、引数の内容に応じて、生成するオブジェクトを切り替える。
・is-a関係にあるクラス群を全く同じ生成方法で用意することが出来る。

実装サンプル
package may20150531;

public class FactoryPattern {
	public static void main(String[] args) {
		Men jiro = FactoryPattern.createMen("次郎");
		Men somen = FactoryPattern.createMen("そうめん");

		jiro.printLardQuantity();
		somen.printLardQuantity();

	}

	// ファクトリメソッド
	public static Men createMen(String type) {
		switch (type) {
		case "次郎":
			return new Jiro();
		case "そうめん":
			return new Somen();
		default:
			break;
		}
		// 何も言わないと、次郎を食わされる。
		return new Jiro();
	}
}

class Jiro implements Men {
	String name = "次郎ラーメン";

	@Override
	public void printLardQuantity() {
		System.out.println(name + ", 油:マシマシ");
	}

}

class Somen implements Men {
	String name = "そうめん";

	@Override
	public void printLardQuantity() {
		System.out.println(name + ", 油:なし");
	}
}

interface Men {
	void printLardQuantity();
}

実行結果
次郎ラーメン, 油:マシマシ
そうめん, 油:なし

拍手[0回]

2015

0531
・Localeは、
Locale オブジェクトは、地理的、政治的、または文化的に特定の地域を表します。

・多様な作成方法がある
 ビルダー、コンストラクタ、ファクトリメソッド、ロケール定数


サンプルコード

package may20150531;

import java.util.Iterator;
import java.util.Locale;

public class LocaleInstanceVariation {
	public static void main(String[] args) {
		// language
		System.out.println("Locale.JAPAN.getLanguage()	=	" + Locale.JAPAN.getLanguage());

		// script
		System.out.println("Locale.JAPAN.getScript()	=	" + Locale.JAPAN.getScript());

		// country ( region )
		System.out.println("Locale.JAPAN.getCountry()	=	" + Locale.JAPAN.getCountry());

		// valiant
		System.out.println("Locale.JAPAN.getVariant()	=	" + Locale.JAPAN.getVariant());

		// extensions
		System.out.println("Locale.JAPAN.getExtensionKeys	 =	");
		Iterator<?> ite = Locale.JAPAN.getExtensionKeys().iterator();
		while(ite.hasNext()) {
			System.out.println(ite.next());
		}

		System.out.println("---------------------------------------------");
		// 作成バリエーション
		// ビルダー
		Locale instanceByBuilder = new Locale.Builder().setRegion("JP").setLanguage("ja").build();
		System.out.println("new Locale.Builder().setRegion(\"JP\").setLanguage(\"ja\").build()	 =	" + instanceByBuilder);

		// コンストラクタ
		Locale instanceByConstracta = new Locale("ja","JP","");
		System.out.println("new Locale(\"ja\",\"JP\",\"\")					=	" +  instanceByConstracta);

		// ファクトリメソッド
		Locale instanceByFactoryMethod = Locale.forLanguageTag("ja-JP");
		System.out.println("Locale.forLanguageTag(\"ja-JP\")					=	"+instanceByFactoryMethod);

		// ロケール定数
		Locale instanceByConstant = Locale.JAPAN;
		System.out.println("Locale.JAPAN							=	" + instanceByConstant);
	}
}


実行例
Locale.JAPAN.getLanguage() = ja
Locale.JAPAN.getScript() =
Locale.JAPAN.getCountry() = JP
Locale.JAPAN.getVariant() =
Locale.JAPAN.getExtensionKeys =
---------------------------------------------
new Locale.Builder().setRegion("JP").setLanguage("ja").build() = ja_JP
new Locale("ja","JP","") = ja_JP
Locale.forLanguageTag("ja-JP") = ja_JP
Locale.JAPAN = ja_JP

拍手[0回]

<< 前のページ | HOME | 次のページ忍者ブログ [PR] * Template by TMP >>
プロフィール
HN:
たんてーくん
性別:
非公開
フリーエリア
最新CM
[09/25 http://2017.bblbuy.com]
[09/24 http://www.japanform.com]
[09/23 http://www.japanform.com]
[09/22 http://www.japanform.com]
[09/21 http://2017.bblbuy.com]
ブログ内検索
忍者ブログ [PR]
* Template by TMP