Project Coinより小さなCoin

39
Project Coin より小さな Coin 知っていると得するかもしれない 地味なあれ

description

 

Transcript of Project Coinより小さなCoin

Page 1: Project Coinより小さなCoin

Project Coin より小さなCoin

知っていると得するかもしれない地味なあれ

Page 2: Project Coinより小さなCoin

やまもと かずきtwitter: @yamkazuhatena: yamkazu

Page 3: Project Coinより小さなCoin

今日の話

JDK 7 の Featuresからは気がつかないちょっとした変更点を紹介します

Page 4: Project Coinより小さなCoin

java.applet.Applet#isValidateRootjava.awt.Window#setAutoRequestFocusjava.awt.Window#isAutoRequestFocusjava.awt.Window#isValidateRootjava.awt.Window#setTypejava.awt.Window#getTypejava.awt.Window#getOpacityjava.awt.Window#setOpacityjava.awt.Window#getShapejava.awt.Window#setShapejava.awt.Window#isOpaquejava.awt.Window#paintjava.awt.Window.Type [class]java.awt.Toolkit#areExtraMouseButtonsEnabledjava.awt.SecondaryLoop [class]java.awt.GraphicsDevice#isWindowTranslucencySupportedjava.awt.GraphicsDevice.WindowTranslucency [class]java.awt.GraphicsConfiguration#isTranslucencyCapablejava.awt.FileDialog#getFilesjava.awt.FileDialog#setMultipleModejava.awt.FileDialog#isMultipleModejava.awt.EventQueue#createSecondaryLoopjava.awt.Container#isValidateRootjava.awt.Component#revalidatejava.awt.event.MouseWheelEvent#getPreciseWheelRotationjava.awt.event.KeyEvent#getExtendedKeyCodejava.awt.event.KeyEvent#getExtendedKeyCodeForCharjava.awt.event.InvocationEvent#isDispatchedjava.awt.font.NumericShaper#getShaperjava.awt.font.NumericShaper#getContextualShaperjava.awt.font.NumericShaper#getContextualShaperjava.awt.font.NumericShaper#shapejava.awt.font.NumericShaper#getRangeSetjava.awt.font.NumericShaper.Range [class]java.awt.peer.ComponentPeer#applyShapejava.awt.peer.ComponentPeer#updateGraphicsDatajava.awt.peer.CanvasPeer#getAppropriateGraphicsConfigurationjava.beans.XMLDecoder#createHandlerjava.beans.Transient [class]java.beans.PropertyChangeEvent#toStringjava.beans.Introspector#getBeanInfojava.beans.FeatureDescriptor#toStringjava.beans.Expression#executejava.io.File#toPathjava.lang.Throwable#addSuppressedjava.lang.Throwable#getSuppressedjava.lang.Short#comparejava.lang.ReflectiveOperationException [class]java.lang.ProcessBuilder#redirectInputjava.lang.ProcessBuilder#redirectOutputjava.lang.ProcessBuilder#redirectErrorjava.lang.ProcessBuilder#redirectInputjava.lang.ProcessBuilder#redirectOutputjava.lang.ProcessBuilder#redirectErrorjava.lang.ProcessBuilder#redirectInputjava.lang.ProcessBuilder#redirectOutputjava.lang.ProcessBuilder#redirectErrorjava.lang.ProcessBuilder#inheritIOjava.lang.ProcessBuilder.Redirect [class]java.lang.Long#comparejava.lang.Integer#comparejava.lang.ClassValue [class]java.lang.ClassLoader#getClassLoadingLockjava.lang.ClassLoader#registerAsParallelCapablejava.lang.Character#isBmpCodePointjava.lang.Character#isSurrogatejava.lang.Character#highSurrogatejava.lang.Character#lowSurrogatejava.lang.Character#isAlphabeticjava.lang.Character#isIdeographicjava.lang.Character#comparejava.lang.Character#getNamejava.lang.Character.UnicodeScript [class]java.lang.Byte#comparejava.lang.BootstrapMethodError [class]java.lang.Boolean#comparejava.lang.AutoCloseable [class]java.lang.invoke.WrongMethodTypeException [class]java.lang.management.PlatformManagedObject [class]java.lang.management.PlatformLoggingMXBean [class]java.lang.management.ManagementFactory#getPlatformMXBeanjava.lang.management.ManagementFactory#getPlatformMXBeansjava.lang.management.ManagementFactory#getPlatformMXBeanjava.lang.management.ManagementFactory#getPlatformMXBeansjava.lang.management.ManagementFactory#getPlatformManagementInterfacesjava.lang.management.BufferPoolMXBean [class]java.lang.reflect.Modifier#classModifiersjava.lang.reflect.Modifier#interfaceModifiersjava.lang.reflect.Modifier#constructorModifiersjava.lang.reflect.Modifier#methodModifiersjava.lang.reflect.Modifier#fieldModifiersjava.net.URLClassLoader#getResourceAsStreamjava.net.URLClassLoader#closejava.net.StandardSocketOptions [class]java.net.StandardProtocolFamily [class]java.net.SocketOption [class]java.net.ProtocolFamily [class]java.net.NetworkInterface#getIndexjava.net.NetworkInterface#getByIndexjava.net.InetSocketAddress#getHostStringjava.net.InetAddress#getLoopbackAddressjava.net.HttpURLConnection#setFixedLengthStreamingModejava.nio.channels.WritePendingException [class]java.nio.channels.SocketChannel#bindjava.nio.channels.SocketChannel#setOptionjava.nio.channels.SocketChannel#shutdownInputjava.nio.channels.SocketChannel#shutdownOutputjava.nio.channels.SocketChannel#getRemoteAddressjava.nio.channels.ShutdownChannelGroupException [class]java.nio.channels.ServerSocketChannel#bindjava.nio.channels.ServerSocketChannel#bindjava.nio.channels.ServerSocketChannel#setOptionjava.nio.channels.SeekableByteChannel [class]java.nio.channels.ReadPendingException [class]java.nio.channels.NetworkChannel [class]java.nio.channels.MulticastChannel [class]java.nio.channels.MembershipKey [class]java.nio.channels.InterruptedByTimeoutException [class]java.nio.channels.IllegalChannelGroupException [class]java.nio.channels.FileLock#acquiredByjava.nio.channels.FileLock#closejava.nio.channels.FileChannel#openjava.nio.channels.FileChannel#openjava.nio.channels.DatagramChannel#openjava.nio.channels.DatagramChannel#bindjava.nio.channels.DatagramChannel#setOption

java.nio.channels.DatagramChannel#getRemoteAddressjava.nio.channels.CompletionHandler [class]java.nio.channels.Channels#newInputStreamjava.nio.channels.Channels#newOutputStreamjava.nio.channels.AsynchronousSocketChannel [class]java.nio.channels.AsynchronousServerSocketChannel [class]java.nio.channels.AsynchronousFileChannel [class]java.nio.channels.AsynchronousChannelGroup [class]java.nio.channels.AsynchronousChannel [class]java.nio.channels.AsynchronousByteChannel [class]java.nio.channels.AlreadyBoundException [class]java.nio.channels.AcceptPendingException [class]java.nio.channels.spi.SelectorProvider#openDatagramChanneljava.nio.channels.spi.AsynchronousChannelProvider [class]java.nio.charset.StandardCharsets [class]java.nio.file.Watchable [class]java.nio.file.WatchService [class]java.nio.file.WatchKey [class]java.nio.file.WatchEvent [class]java.nio.file.WatchEvent.Kind [class]java.nio.file.WatchEvent.Modifier [class]java.nio.file.StandardWatchEventKinds [class]java.nio.file.StandardOpenOption [class]java.nio.file.StandardCopyOption [class]java.nio.file.SimpleFileVisitor [class]java.nio.file.SecureDirectoryStream [class]java.nio.file.Paths [class]java.nio.file.PathMatcher [class]java.nio.file.Path [class]java.nio.file.OpenOption [class]java.nio.file.NotLinkException [class]java.nio.file.NotDirectoryException [class]java.nio.file.NoSuchFileException [class]java.nio.file.LinkPermission [class]java.nio.file.LinkOption [class]java.nio.file.Files [class]java.nio.file.FileVisitor [class]java.nio.file.FileVisitResult [class]java.nio.file.FileVisitOption [class]java.nio.file.FileSystems [class]java.nio.file.FileSystemLoopException [class]java.nio.file.FileSystemException [class]java.nio.file.FileSystem [class]java.nio.file.FileStore [class]java.nio.file.FileAlreadyExistsException [class]java.nio.file.DirectoryStream [class]java.nio.file.DirectoryStream.Filter [class]java.nio.file.DirectoryNotEmptyException [class]java.nio.file.DirectoryIteratorException [class]java.nio.file.CopyOption [class]java.nio.file.ClosedDirectoryStreamException [class]java.nio.file.AtomicMoveNotSupportedException [class]java.nio.file.AccessMode [class]java.nio.file.AccessDeniedException [class]java.nio.file.attribute.UserPrincipalNotFoundException [class]java.nio.file.attribute.UserPrincipalLookupService [class]java.nio.file.attribute.UserPrincipal [class]java.nio.file.attribute.UserDefinedFileAttributeView [class]java.nio.file.attribute.PosixFilePermissions [class]java.nio.file.attribute.PosixFilePermission [class]java.nio.file.attribute.PosixFileAttributes [class]java.nio.file.attribute.PosixFileAttributeView [class]java.nio.file.attribute.GroupPrincipal [class]java.nio.file.attribute.FileTime [class]java.nio.file.attribute.FileStoreAttributeView [class]java.nio.file.attribute.FileOwnerAttributeView [class]java.nio.file.attribute.FileAttributeView [class]java.nio.file.attribute.FileAttribute [class]java.nio.file.attribute.DosFileAttributes [class]java.nio.file.attribute.DosFileAttributeView [class]java.nio.file.attribute.BasicFileAttributes [class]java.nio.file.attribute.BasicFileAttributeView [class]java.nio.file.attribute.AttributeView [class]java.nio.file.attribute.AclFileAttributeView [class]java.nio.file.attribute.AclEntryType [class]java.nio.file.attribute.AclEntryPermission [class]java.nio.file.attribute.AclEntryFlag [class]java.nio.file.attribute.AclEntry [class]java.nio.file.attribute.AclEntry.Builder [class]java.nio.file.spi.FileTypeDetector [class]java.nio.file.spi.FileSystemProvider [class]java.security.CryptoPrimitive [class]java.security.AlgorithmConstraints [class]java.security.cert.X509CRLEntry#getRevocationReasonjava.security.cert.PKIXReason [class]java.security.cert.Extension [class]java.security.cert.CertificateRevokedException [class]java.security.cert.CertPathValidatorException#getReasonjava.security.cert.CertPathValidatorException.Reason [class]java.security.cert.CertPathValidatorException.BasicReason [class]java.security.cert.CRLReason [class]java.sql.Statement#closeOnCompletionjava.sql.Statement#isCloseOnCompletionjava.sql.ResultSet#getObjectjava.sql.ResultSet#getObjectjava.sql.PseudoColumnUsage [class]java.sql.Driver#getParentLoggerjava.sql.DatabaseMetaData#getPseudoColumnsjava.sql.DatabaseMetaData#generatedKeyAlwaysReturnedjava.sql.Connection#setSchemajava.sql.Connection#getSchemajava.sql.Connection#abortjava.sql.Connection#setNetworkTimeoutjava.sql.Connection#getNetworkTimeoutjava.sql.CallableStatement#getObjectjava.sql.CallableStatement#getObjectjava.util.TimeZone#observesDaylightTimejava.util.SimpleTimeZone#observesDaylightTimejava.util.Objects [class]java.util.Locale#getDefaultjava.util.Locale#setDefaultjava.util.Locale#getScriptjava.util.Locale#getExtensionjava.util.Locale#getExtensionKeysjava.util.Locale#getUnicodeLocaleAttributesjava.util.Locale#getUnicodeLocaleTypejava.util.Locale#getUnicodeLocaleKeysjava.util.Locale#toLanguageTagjava.util.Locale#forLanguageTagjava.util.Locale#getDisplayScriptjava.util.Locale#getDisplayScriptjava.util.Locale.Category [class]java.util.Locale.Builder [class]java.util.IllformedLocaleException [class]java.util.GregorianCalendar#isWeekDateSupportedjava.util.GregorianCalendar#getWeekYear

java.util.GregorianCalendar#setWeekDatejava.util.GregorianCalendar#getWeeksInWeekYearjava.util.Currency#getAvailableCurrenciesjava.util.Currency#getNumericCodejava.util.Currency#getDisplayNamejava.util.Currency#getDisplayNamejava.util.Collections#emptyIteratorjava.util.Collections#emptyListIteratorjava.util.Collections#emptyEnumerationjava.util.Calendar#isWeekDateSupportedjava.util.Calendar#getWeekYearjava.util.Calendar#setWeekDatejava.util.Calendar#getWeeksInWeekYearjava.util.BitSet#valueOfjava.util.BitSet#valueOfjava.util.BitSet#valueOfjava.util.BitSet#valueOfjava.util.BitSet#toByteArrayjava.util.BitSet#toLongArrayjava.util.BitSet#previousSetBitjava.util.BitSet#previousClearBitjava.util.concurrent.TransferQueue [class]java.util.concurrent.ThreadLocalRandom [class]java.util.concurrent.ScheduledThreadPoolExecutor#setRemoveOnCancelPolicyjava.util.concurrent.ScheduledThreadPoolExecutor#getRemoveOnCancelPolicyjava.util.concurrent.RecursiveTask [class]java.util.concurrent.RecursiveAction [class]java.util.concurrent.Phaser [class]java.util.concurrent.LinkedTransferQueue [class]java.util.concurrent.ForkJoinWorkerThread [class]java.util.concurrent.ForkJoinTask [class]java.util.concurrent.ForkJoinPool [class]java.util.concurrent.ConcurrentLinkedDeque [class]java.util.concurrent.locks.AbstractQueuedSynchronizer#hasQueuedPredecessorsjava.util.concurrent.locks.AbstractQueuedLongSynchronizer#hasQueuedPredecessorsjava.util.logging.Logger#getGlobaljava.util.spi.LocaleNameProvider#getDisplayScriptjava.util.spi.CurrencyNameProvider#getDisplayNamejava.util.zip.DeflaterOutputStream#flushjava.util.zip.Deflater#deflatejavax.lang.model.UnknownEntityException [class]javax.lang.model.element.QualifiedNameable [class]javax.lang.model.element.Parameterizable [class]javax.lang.model.type.UnionType [class]javax.lang.model.type.TypeVisitor#visitUnionjavax.lang.model.util.TypeKindVisitor7 [class]javax.lang.model.util.SimpleTypeVisitor7 [class]javax.lang.model.util.SimpleElementVisitor7 [class]javax.lang.model.util.SimpleAnnotationValueVisitor7 [class]javax.lang.model.util.ElementScanner7 [class]javax.lang.model.util.ElementKindVisitor7 [class]javax.lang.model.util.ElementKindVisitor6#visitVariableAsResourceVariablejavax.lang.model.util.AbstractTypeVisitor7 [class]javax.lang.model.util.AbstractTypeVisitor6#visitUnionjavax.lang.model.util.AbstractElementVisitor7 [class]javax.lang.model.util.AbstractAnnotationValueVisitor7 [class]javax.print.attribute.standard.DialogTypeSelection [class]javax.security.auth.kerberos.KeyTab [class]javax.sound.midi.MidiDeviceTransmitter [class]javax.sound.midi.MidiDeviceReceiver [class]javax.sql.CommonDataSource#getParentLoggerjavax.sql.rowset.RowSetProvider [class]javax.sql.rowset.RowSetProvider#newFactoryjavax.sql.rowset.RowSetProvider#newFactoryjavax.sql.rowset.RowSetFactory [class]javax.sql.rowset.RowSetFactory#createCachedRowSetjavax.sql.rowset.RowSetFactory#createFilteredRowSetjavax.sql.rowset.RowSetFactory#createJdbcRowSetjavax.sql.rowset.RowSetFactory#createJoinRowSetjavax.sql.rowset.RowSetFactory#createWebRowSetjavax.swing.SwingUtilities#getUnwrappedParentjavax.swing.SwingUtilities#getUnwrappedViewjavax.swing.JTree.EmptySelectionModel#setSelectionModejavax.swing.JTree.EmptySelectionModel#setRowMapperjavax.swing.JTree.EmptySelectionModel#addTreeSelectionListenerjavax.swing.JTree.EmptySelectionModel#removeTreeSelectionListenerjavax.swing.JTree.EmptySelectionModel#addPropertyChangeListenerjavax.swing.JTree.EmptySelectionModel#removePropertyChangeListenerjavax.swing.JSlider#imageUpdatejavax.swing.JList#getSelectedValuesListjavax.swing.JLayer [class]javax.swing.BorderFactory#createLineBorderjavax.swing.BorderFactory#createRaisedSoftBevelBorderjavax.swing.BorderFactory#createLoweredSoftBevelBorderjavax.swing.BorderFactory#createSoftBevelBorderjavax.swing.BorderFactory#createSoftBevelBorderjavax.swing.BorderFactory#createSoftBevelBorderjavax.swing.BorderFactory#createStrokeBorderjavax.swing.BorderFactory#createStrokeBorderjavax.swing.BorderFactory#createDashedBorderjavax.swing.BorderFactory#createDashedBorderjavax.swing.BorderFactory#createDashedBorderjavax.swing.border.StrokeBorder [class]javax.swing.event.HyperlinkEvent#getInputEventjavax.swing.plaf.LayerUI [class]javax.swing.plaf.FileChooserUI#getDefaultButtonjavax.swing.plaf.basic.BasicTreeUI#isDropLinejavax.swing.plaf.basic.BasicTreeUI#paintDropLinejavax.swing.plaf.basic.BasicTreeUI#getDropLineRectjavax.swing.plaf.basic.BasicTreeUI#updateLeadSelectionRowjavax.swing.plaf.basic.BasicTreeUI#getLeadSelectionRowjavax.swing.plaf.basic.BasicFileChooserUI#createUIjavax.swing.plaf.basic.BasicComboBoxUI#getSizeForComponentjavax.swing.plaf.basic.BasicColorChooserUI#uninstallPreviewPaneljavax.swing.plaf.nimbus.NimbusLookAndFeel#shouldUpdateStyleOnEventjavax.swing.plaf.synth.SynthViewportUI [class]javax.swing.plaf.synth.SynthUI [class]javax.swing.plaf.synth.SynthTreeUI [class]javax.swing.plaf.synth.SynthToolTipUI [class]javax.swing.plaf.synth.SynthToolBarUI [class]javax.swing.plaf.synth.SynthToggleButtonUI [class]javax.swing.plaf.synth.SynthTextPaneUI [class]javax.swing.plaf.synth.SynthTextFieldUI [class]javax.swing.plaf.synth.SynthTextAreaUI [class]javax.swing.plaf.synth.SynthTableUI [class]javax.swing.plaf.synth.SynthTableHeaderUI [class]javax.swing.plaf.synth.SynthTabbedPaneUI [class]javax.swing.plaf.synth.SynthSplitPaneUI [class]javax.swing.plaf.synth.SynthSpinnerUI [class]javax.swing.plaf.synth.SynthSliderUI [class]javax.swing.plaf.synth.SynthSeparatorUI [class]javax.swing.plaf.synth.SynthScrollPaneUI [class]javax.swing.plaf.synth.SynthScrollBarUI [class]javax.swing.plaf.synth.SynthRootPaneUI [class]javax.swing.plaf.synth.SynthRadioButtonUI [class]javax.swing.plaf.synth.SynthRadioButtonMenuItemUI [class]

javax.swing.plaf.synth.SynthProgressBarUI [class]javax.swing.plaf.synth.SynthPopupMenuUI [class]javax.swing.plaf.synth.SynthPasswordFieldUI [class]javax.swing.plaf.synth.SynthPanelUI [class]javax.swing.plaf.synth.SynthOptionPaneUI [class]javax.swing.plaf.synth.SynthMenuUI [class]javax.swing.plaf.synth.SynthMenuItemUI [class]javax.swing.plaf.synth.SynthMenuBarUI [class]javax.swing.plaf.synth.SynthLookAndFeel#shouldUpdateStyleOnEventjavax.swing.plaf.synth.SynthListUI [class]javax.swing.plaf.synth.SynthLabelUI [class]javax.swing.plaf.synth.SynthInternalFrameUI [class]javax.swing.plaf.synth.SynthFormattedTextFieldUI [class]javax.swing.plaf.synth.SynthEditorPaneUI [class]javax.swing.plaf.synth.SynthDesktopPaneUI [class]javax.swing.plaf.synth.SynthDesktopIconUI [class]javax.swing.plaf.synth.SynthComboBoxUI [class]javax.swing.plaf.synth.SynthColorChooserUI [class]javax.swing.plaf.synth.SynthCheckBoxUI [class]javax.swing.plaf.synth.SynthCheckBoxMenuItemUI [class]javax.swing.plaf.synth.SynthButtonUI [class]javax.swing.text.JTextComponent#saveComposedTextjavax.swing.text.JTextComponent#restoreComposedTextjavax.swing.text.DefaultStyledDocument#removeElementjavax.swing.tree.DefaultTreeCellRenderer#updateUI

403

Page 5: Project Coinより小さなCoin

ObjectsShortLongIntegerCharacterByteBooleanCollectionsAssertionErrorInetAddressThrowableProcessBuilderCalendar

Page 6: Project Coinより小さなCoin

だいぶ地味な内容なので聞きながら「で?」とか思わず「おぉ、地味だなぁ」

というスタンスでお楽しみください。

はじめに

Page 7: Project Coinより小さなCoin

ObjectsShortLongIntegerCharacterByteBooleanCollectionsAssertionErrorInetAddressThrowableProcessBuilderCalendar

Page 8: Project Coinより小さなCoin

Objects

public static boolean equals(Object a, Object b)

public static boolean deepEquals(Object a, Object b)

public static int hashCode(Object o)

public static int hash(Object... values)

public static String toString(Object o)

public static String toString(Object o, String nullDefault)

public static <T> int compare(T a, T b, Comparator<? super T> c)

public static <T> T requireNonNull(T obj)

public static <T> T requireNonNull(T obj, String message)

NEW

Page 9: Project Coinより小さなCoin

Objects#equals

Object o1 = new Object();Object o2 = o1;assert Objects.equals(o1, o2); // true

// 内部的には == で比較して// falseならequalsを呼び出す// return (a == b) || (a != null && a.equals(b))

assert Objects.equals("aaa", "aaa"); // true

Page 10: Project Coinより小さなCoin

Objects#deepEquals

int[][] a1 = { {1, 2, 3}, {4, 5, 6} };int[][] a2 = { {1, 2, 3}, {4, 5, 6} };

// Arrays.deepEqualsとだいたい一緒assert Objects.deepEquals(a1, a2); // true

Page 11: Project Coinより小さなCoin

Objects#toString

// 第2引数にデフォルト値を設定するよくあるあれ// 内部的にはString.valueOfを呼んでいるString s1 = Objects.toString("aaa", "null value");assert s1.equals("aaa"); // true

String s2 = Objects.toString(null, "null value");assert s2.equals("null value"); // true

Page 12: Project Coinより小さなCoin

Objects#requireNonNull

void setName(String name) { // 引数のnullチェックしながら代入とか this.name = Objects.requireNonNull(name, "名前は必須");

}

Page 13: Project Coinより小さなCoin

ObjectsShortLong

IntegerCharacter

ByteBooleanCollectionsAssertionErrorInetAddressThrowableProcessBuilderCalendar

Page 14: Project Coinより小さなCoin

#compare

java.lang.Short#compare(short x, short y)

java.lang.Long#compare(long x, long y)

java.lang.Integer#compare(int x, int y)

java.lang.Character#compare(char x, char y)

java.lang.Byte#compare(byte x, byte y)

java.lang.Boolean#compare(boolean x, boolean y)

ADD

// 等しければ0、xのが小さい場合-1以下// xのが大きい場合1以上を返すあれ

Page 15: Project Coinより小さなCoin

ObjectsShortLongIntegerCharacterByteBoolean

CollectionsAssertionErrorInetAddressThrowableProcessBuilderCalendar

Page 16: Project Coinより小さなCoin

Collections

public static <T> Iterator<T> emptyIterator()

public static <T> ListIterator<T> emptyListIterator()

public static <T> Enumeration<T> emptyEnumeration()

ADD

Page 17: Project Coinより小さなCoin

// 自前でIteratorを返すようなとこで使える// Collections.emptyXXX()シリーズが増えたpublic Iterator<E> iterator() { if (data == null) { return Collections.emptyIterator(); } // ...}

Page 18: Project Coinより小さなCoin

ObjectsShortLongIntegerCharacterByteBooleanCollections

AssertionErrorInetAddressThrowableProcessBuilderCalendar

Page 19: Project Coinより小さなCoin

AssertionErrorADD

public AssertionError(String message, Throwable cause)

Page 20: Project Coinより小さなCoin

AssertionError(String, Throwable)

try { Class.forName("だれもいません");

} catch (ClassNotFoundException e) { // try-catchのコンテキストで // プログラムが意図しない // 動作ルートに入ったときが使いどころかな throw new AssertionError("\(^o^)/オワタ", e);

}

Page 21: Project Coinより小さなCoin

ObjectsShortLongIntegerCharacterByteBooleanCollectionsAssertionErrorInetAddressThrowableProcessBuilderCalendar

Page 22: Project Coinより小さなCoin

InetAddress

public static InetAddress getLoopbackAddress()

ADD

Page 23: Project Coinより小さなCoin

InetAddress#getLoopbackAddress

InetAddress a = InetAddress.getLoopbackAddress();

assert a.getHostAddress().equals("127.0.0.1");assert a.getHostName().equals("localhost");assert a.isLoopbackAddress();

Page 24: Project Coinより小さなCoin

ObjectsShortLongIntegerCharacterByteBooleanCollectionsAssertionErrorInetAddressThrowableProcessBuilderCalendar

Page 25: Project Coinより小さなCoin

Throwable

public final synchronized void addSuppressed(Throwable exception)

public final synchronized Throwable[] getSuppressed()

ADD

Page 26: Project Coinより小さなCoin

Throwable#addSuppressedThrowable#getSuppressed// try-with-resourcesのやつで入ったけど// 自分で使ってもおk?try { view.setTimes(attrs.lastModifiedTime(), attrs.lastAccessTime(), attrs.creationTime());} catch (Throwable x) { // rollback try { Files.delete(target); } catch (Throwable suppressed) { x.addSuppressed(suppressed); } throw x;}

Page 27: Project Coinより小さなCoin

ObjectsShortLongIntegerCharacterByteBooleanCollectionsAssertionErrorInetAddressThrowable

ProcessBuilderCalendar

Page 28: Project Coinより小さなCoin

ProcessBuilder

public ProcessBuilder redirectInput(Redirect source)

public ProcessBuilder redirectOutput(Redirect destination)

public ProcessBuilder redirectError(Redirect destination)

public ProcessBuilder redirectInput(File file)

public ProcessBuilder redirectOutput(File file)

public ProcessBuilder redirectError(File file)

public ProcessBuilder redirectErrorStream

(boolean redirectErrorStream)

public ProcessBuilder inheritIO()

public static abstract class Redirect

ADD

Page 29: Project Coinより小さなCoin

// ファイルを入力してファイルに出力する

// md5 input.txt > output.txt のような感じ

ProcessBuilder builder = new ProcessBuilder("md5");

builder.redirectInput(Redirect.from(new File("input.txt")));

builder.redirectOutput(Redirect.to(new File("output.txt")));

Process process = builder.start();

// ...

Page 30: Project Coinより小さなCoin

ObjectsShortLongIntegerCharacterByteBooleanCollectionsAssertionErrorInetAddressThrowableProcessBuilderCalendar

Page 31: Project Coinより小さなCoin

Calendar(GregorianCalendar)

public boolean isWeekDateSupported()

public int getWeeksInWeekYear()

public int getWeekYear()

public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)

ADD

Page 32: Project Coinより小さなCoin

暦週日付? (week date)

• ISO 8601方式の場合

• 年、週および週日を用いてあらわす日付

• 暦週は、暦年中の序数によって指定される特定の7日の期間で、 月曜日から始まる

• その年の第1週は、最初の木曜日を含む週とすうる

• これは1月4日を含む週に等しい

例: 2000-W30-1

Page 33: Project Coinより小さなCoin

暦週日付 (week date)?

月 火 水 木 金 土 日

27 28 29 30 31 1 2

3 4 5 6 7 8 9

2011年1月

2011年第1週

2010年第52週

ISO 8601方式の場合

Page 34: Project Coinより小さなCoin

Calendar calendar = Calendar.getInstance();

// ISO8601calendar.setFirstDayOfWeek(MONDAY);calendar.setMinimalDaysInFirstWeek(4);

// 2011年の第1週の月曜日calendar.setWeekDate(2011, 1, MONDAY);

assert calendar.get(YEAR) == 2011; // 2011年assert calendar.get(MONTH) == 0; // 1月assert calendar.get(DAY_OF_MONTH) == 3; // 3日

Page 35: Project Coinより小さなCoin

Calendar calendar = Calendar.getInstance();

// ISO8601calendar.setFirstDayOfWeek(MONDAY);calendar.setMinimalDaysInFirstWeek(4);

calendar.set(2011, 0, 2); // 2011年1月2日assert calendar.getWeekYear() == 2010;

calendar.set(2011, 0, 3); // 2011年1月3日assert calendar.getWeekYear() == 2011;

Page 36: Project Coinより小さなCoin

Calendar calendar = Calendar.getInstance();

//ISO8601calendar.setFirstDayOfWeek(MONDAY);calendar.setMinimalDaysInFirstWeek(4);

calendar.set(YEAR, 2011);assert calendar.getWeeksInWeekYear() == 52;

calendar.set(YEAR, 2010);assert calendar.getWeeksInWeekYear() == 52;

calendar.set(YEAR, 2009);assert calendar.getWeeksInWeekYear() == 53;

Page 37: Project Coinより小さなCoin

以上だいぶ地味でしたが...

Page 38: Project Coinより小さなCoin

知っていればちょっとでも

似たようなコードを書かなくて

済むかもしれません!

Page 39: Project Coinより小さなCoin

EnjoyJava SE 7!!