よくわからないことを調べて解説してみるブログ。
2015
・instanceofには2つの記法がある
①( クラスオブジェクト instanceof クラス)
②(インタフェースオブジェクト instanceof クラス)
①においては、クラスオブジェクトがどんな型であっても演算可能だが、
②においては、インタフェースオブジェクトと比較対象のクラスに継承関係か実装関係が無いと、コンパイルエラーになる。
そもそもの目的がサブクラス、クラスであるか、実装クラス、実装クラスのサブクラスであるかを問うためのものである。すなわち、継承関係や実装関係を問えるようなオブジェクトを左辺に指定しなくてはならないのは当然であり、それはコンパイラが検証出来る範囲でもある。
①( クラスオブジェクト instanceof クラス)
②(インタフェースオブジェクト instanceof クラス)
①においては、クラスオブジェクトがどんな型であっても演算可能だが、
②においては、インタフェースオブジェクトと比較対象のクラスに継承関係か実装関係が無いと、コンパイルエラーになる。
そもそもの目的がサブクラス、クラスであるか、実装クラス、実装クラスのサブクラスであるかを問うためのものである。すなわち、継承関係や実装関係を問えるようなオブジェクトを左辺に指定しなくてはならないのは当然であり、それはコンパイラが検証出来る範囲でもある。
PR
2015
・FileChannelは、書き込み時にByteBufferを利用できる。
・ByteBufferは、ファクトリメソッドにより生成するが、allocate,wrapの使い方に違いがある。
・allocateの場合
→実行結果
・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
2015
Format
┗ DateFormat
┗ SimpleDateFormat
┗ NumberFormat
┗ DecimalFormat
┗ ChoiceFormat
┗ MessageFormat
DateFormat,NumberFormatは、ロケール対応のみしており、細かな表現方法は指定できない。
SimpleDateFormat,DecimalFormatは、細かな表現方法が指定可能である。
ChoiceFormatは、数値について範囲ごとの表現を指定可能である。例えば、
実行結果
┗ 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.01.0 -> Sun -> 1.02.0 -> Mon -> 2.03.0 -> Tue -> 3.04.0 -> Wed -> 4.05.0 -> Thur -> 5.06.0 -> Fri -> 6.07.0 -> Sat -> 7.08.0 -> Sat -> 7.0
2015
・代表的な実装例としては、プリミティブ型のラッパークラス群のvalueOfメソッド群
・new を用いず、引数の内容に応じて、生成するオブジェクトを切り替える。
・is-a関係にあるクラス群を全く同じ生成方法で用意することが出来る。
実装サンプル
実行結果
・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(); }
実行結果
次郎ラーメン, 油:マシマシそうめん, 油:なし
2015
・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() = jaLocale.JAPAN.getScript() =Locale.JAPAN.getCountry() = JPLocale.JAPAN.getVariant() =Locale.JAPAN.getExtensionKeys =---------------------------------------------new Locale.Builder().setRegion("JP").setLanguage("ja").build() = ja_JPnew Locale("ja","JP","") = ja_JPLocale.forLanguageTag("ja-JP") = ja_JPLocale.JAPAN = ja_JP
プロフィール
HN:
たんてーくん
性別:
非公開
最新記事
(03/29)
(03/29)
(06/26)
(05/21)
(04/23)
カテゴリー
最新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]
ブログ内検索