この記事について Effective Java 3rd Edition が発行されました。Java7以降のJava9までの新言語要素が加味されていて、そういうのはとりあえずLambdaなのだろうと思うのですがそれ以外に変わった・追加されたところが気になりました。そこで、第2版と第3版を横に並べて見比べてそういう所をざっくり確認してみました。 この記事では新規の Item についてではなく既存の Item 内で変化した所について「特徴的かも!」と思ったところを並べています。1 多分あなたがこの記事を読まれてもわかった気分になることは決してなくて、どちらかと言うと第2版を読んだことがある人が第3版を学び直す時の参考資料のような使いみちになると思います。誤解や抜け漏れてんこ盛りかと思いますので、間違い探しを楽しむぐらいの感覚でお願いします。 変化したところを全体的に言えば、シリアライゼーションの
Javaプログラムにおいて、ある処理にかかる時間を計測したいということがあります。 Javaの実行環境(JavaVM:Java Virtual Machine)では、JITコンパイルやガベージコレクションがプログラム動作中に併せて動作し、プログラムの実行性能に少なからず影響を与えます。 例えば、JITコンパイルは、プログラム実行当初はJavaバイトコード(ソースファイルからJavaコンパイラがコンパイルしたクラスファイルに含まれる仮想マシンの命令コード)が、その実行する計算機のCPUの命令に翻訳されて実行されます(いわゆるインタープリターモード)。その後、ある処理部分が繰り返し実行され、ある閾値回数以上の繰り返しになると、その処理部分のバイトコードが実行する計算機のCPUのネイティブコードに「実行時コンパイル」されます。それ以降は実行時コンパイルされたCPUネイティブコードである処理部分が
こんにちは、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。 今回、Java のちょっとしたデバッグテクニックを紹介したいと思います。Java で運用中何かトラブルが発生した場合、スレッドダンプを取得することはしばしばあると思いますが、スレッドダンプだけだとちょっと情報が足りないことがあります。今回はスレッドダンプから得られる情報を増やして、素早く障害対応したりデバッグに役立てる方法を紹介します。 まずはじめに: スレッドダンプの取り方 基本ですが、改めてスレッドダンプの取得の仕方を紹介しておきます。スレッドダンプを取得する対象のプロセス ID を仮に 12345 として、下記のように jstack コマンドを実行すればスレッドダンプが取得できます(※Linux上で操作する想定)。 $ jstack 12345 対象のプロセス ID は ps aux | grep jav
2022/12 追記 JetBrains 公式の日本語言語パックがリリースされたため、Pleiades での IntelliJ 系 IDE の対応は廃止しました。問題が発生する可能性があるため、Pleiades で Android Studio や IDEA を 日本語化しないでください。日本語化する場合は下記を参照してください。 Android Studio を日本語化する方法 | CBTDEV https://cbtdev.net/android-studio-japanese/ IntelliJ ベース IDE 向け日本語言語パック | jetbrains.com https://www.jetbrains.com/ja-jp/lp/language-pack/ IntelliJ IDEA 向けに有志により公開されている日本語リソースファイルがいくつかありますが、新しい機能で文字列連
Android Studio 0.5.5から@NonNullアノテーションがサポートされた. 今回はメソッドの引数に@NonNullアノテーションをつけるケースについて書いた. @NonNull @NonNullアノテーションはフィールドやメソッドの引数, メソッドのReturn値にNullを許容しないことを表明するアノテーションである. このアノテーションが便利な点は, @NonNullアノテーションにNullを代入したり, 戻り値のNullチェックをしたりする場合に, IDEが@NonNullの制約をCode Inspectionで示してくれるところだ. ただし, これはIDE付属のCode Inspection設定で報告レベルを調整可能でもあるし, @NonNullの値にNullを設定したからといってシンタックスエラーにはならない. @NonNullはドキュメンテーションや支援機能で
JavaでMonadをはじめからていねいに by Yuji Yamamoto on August 28, 2016 「モナドについてSwiftで説明してみた」という記事などで指摘されているように、プログラマー向けにMonadを説明した記事はサンプルがHaskellで書かれていることが多いので辛いですよね。 HaskellではMonadは「ないと文字通りプログラムが書けないぐらい」大事なもので、入出力処理や例外処理、ダイナミックスコープのシミュレーション、非決定計算など、普通の関数では難しい、非常に様々な機能の実装に使用されています。 その一方、MonadはC言語のポインターに並んでHaskellを学ぶ上での障害である、なんて言われたりもするとおり、他言語ユーザーからHaskellを敬遠させる大きな要因の一つともなっています。 そんな悲しい現状を少しでも改善するために、上記の記事を参考にしつ
昨日、Windows 8.1 x64 なメインPCをWindows 10 Pro x64へアップグレードしました。 不具合があると困ってしまう開発環境周りは事前に検証をしていたのですが、実際アップグレードしてみるとハードが絡んだ問題が発生してしまったので書いておきます。 ちなみに発生条件は他に同様の報告も見当たらず詳しく調査していないので、記事タイトルにあるもの以外の要因があるかもしれません。 対象のソフトウェアは**NetBeans 8.0.2** 正常に起動するものの、しばらく操作していると突然クラッシュしてしまう現象が発生しました。 特定のアクションで発生するわけでもなく、ランダムに発生する感じでした。 まず、検証を行った環境と異なる点といえば、JDKを8u60に更新したので、以前発生したJava SE 8u20の不具合のような問題があるのではないかと考え、8u51にダウングレードし
NullPointerException 嫌いですよね!そんなときに頼りになるのが Java 8 から導入された Optional です。 でも、 null の代わりに Optional を積極的に使うとコードが Optional だらけになり、特に次のような場合に面倒くさいです。 Optional<Integer> a があるとき、 a の値を二乗したい。ただし、 a が empty の場合は empty を得たい。 Optional<Double> a があるとき、 a の平方根を計算したい。ただし、 a が empty または負の数の場合は empty を得たい。なお、 Math.sqrt を安全にした(負の数を渡すと empty を返す)関数 Optional<Double> safeSqrt(double) があるものとして考えて良い。 Optional<Integer> a と
JavaFX 8 公式ドキュメント日本語訳へのリンク集¶ 2015年9月13日時点で、OracleのJava SE 8公式ドキュメント日本語訳トップページ(次のURL)からJavaFX 8関連ドキュメントのリンクは日本語訳ページではなく英語版ページへのリンクとなっています。 2016年5月3日時点で、OracleのJava SE 8公式ドキュメント日本語訳トップページ(次のURL)からJavaFX 8関連ドキュメントのリンクは日本語訳ページになっていました。 http://docs.oracle.com/javase/jp/8/javase-clienttechnologies.htm ということで以下の情報はもう不要です。 まだ翻訳作業が完成しておらず、正式公開されたのではないかもしれません。ですが、日本語で読めるドキュメントは貴重です。 そこで、日本語訳されているJavaFX 8ドキュ
この連載記事は、最適化問題の1つである「組み合わせ最適化問題」を解くことのできる「OptaPlanner」を紹介します。連載第一回目の本記事では、組み合わせ最適化問題の例としてシフトスケジュール作成と集荷経路作成を題材にしながらOptaPlannerが組み合わせ最適化問題を解くために利用しているメタヒューリスティックな解法の概要説明と、適切にメタヒューリスティックな解法を動作させるためのポイントを説明したいと思います。 組み合わせ最適化とは シフトスケジュール作成や巡回ルート作成などは組み合わせや順番を入れかえながらより良いパターンを試行錯誤しながら作っていくことが多いと思います。実際の業務では、シフトの作成の場合は休み希望日や保有スキルを加味しながらより負荷が均等な割当が必要となり、巡回ルート作成では拠点への到着・出発時間の制限を守りながらより効率的な拠点の周り方が必要となります。このよ
最近GoogleがJavaコーディング規約を公開したとニュースで知り、目を通してみたメモを書きます。 また、以前Javaのコーディング規約について調べたメモを次のURLに書きましたが、それ以降に公開されたJavaコーディング規約を探してみました。 http://www.alles.or.jp/~torutk/oojava/codingStandard/ Googleが策定・公開したJavaコーディング規約 先月、InfoQの日本語訳の記事で、Googleが最近Javaコーディング規約を公開したことを知りました。 InfoQの記事(日本語訳)GoogleのJavaコーディング規約 (Google)http://google-styleguide.googlecode.com/svn/trunk/javaguide.html さらっと目を通してみたメモを箇条書きで列挙します。 ファイルのエンコ
2013年のJava Adventカレンダーの11日目のエントリーです。 前日のエントリーは、Satoyuki Tsukanoさんのtwitterとelasticsearchを簡単に連携させる(Apache Camel入門 その2 コンポーネントについて) - Taste of Tech Topics、 明日はkisさんです。 はじめに メジャーバージョンアップとなるJava SE 8が年明けの3月に正式版リリース(GA:General Availability)を迎えます。メジャーバージョンアップでは、目玉機能には注目が集まるのであちこちでその内容が紹介されます。たとえば、Java SE 8ではラムダ式とStream API、Date and Time APIなどが目玉機能となります。これらの記事はすでにあちこちで見かけますね。 一方、既存APIへのクラス・メソッドの追加は地味なので注目
「イベントモデルの概念と用語法が混乱しているので、イライライするんですが」が随分長くなったので、その要点を箇条書きにまとめておきます。 Javaイベントモデルにおけるイベントソースを、DOMイベントモデルではイベントターゲットと呼ぶ。 DOMツリー内をイベントが伝搬する運動過程をイベントフローと呼ぶ。 イベントフローのときに通過するノードの列をチェインと呼ぶ。チェインの両端は、ルートノードとイベントターゲット・ノードである。 イベントフローは、キャプチャリング・フェイズ、ターゲット・フェイズ、バブリング・フェイズの3つの部分に分けられる。 イベントフローのチェインに含まれるノードは、EventTargetインターフェースを実装する必要がある。 「イベントフローの折り返し点=チェインの端点」であるイベントターゲットと、EventTargetインターフェースおよびEventTargetを実装し
JavaFX Advent Calendar 2013の16日目のエントリーです。 前日のエントリーはYasuyuki Fukaiさんの3D初心者がJavaFXの3Dを使い初めてみた。 : 人生、気合いと具合 - blog、翌日のエントリーはpeko_kunさんです。 はじめに GUIの部分をユニットテストしようとすると、通常は人がGUIを操作して結果を判定するので、ロジックのユニットテストのように自動化することが困難です。 JavaのSwingでは、FEST-SwingというGUI自動化テストツールがありました。JavaFXでは何かないかと探していたところ、 JemmyFX TestFX MarvinFX というのがひっかかりました。JemmyFXは、OpenJFXプロジェクトのテストツールでもありますが、以前試してみたときはうまく使えませんでした。 TestFXは、JavaOneサンフ
この記事はJava Advent Calendarの13日目の記事です. 昨日は@kisさんのJava SE 8でパターンマッチを実装するでした. 明日は@megascusさんです. 皆さんはおそらく普段からJavaを使ってプログラムを作っているかと思います. そんな皆さんはJava言語について多くの思い・想いを持っているかと思います. 例えば,「こんな事ができたら良いのに」だったり,「ここが良くないんだよなぁ」といった具合です. そういった言語特徴の追加や改善を自分の手でできたら素敵だと思いませんか? 幸いJavaはOpenJDKというオープンソースプロジェクトで開発が行われており,第三者の僕達でもソースコードを手に入れ自由に変更を加えることができます.*1 この記事では言語の拡張の仕方を述べ,OpenJDKを実際に用いて極々簡単な言語特徴を実装してみます. コンパイラ概要 コンパイラの
Javaのジェネリクスの話題のひとつにnew T()したいができないので困る、というテーマがある。 先日のセッションではこの対策についても簡単に述べたが今日はそのまとめ。 まず第一に疑うべきは本当にnew T()する必然性があるか?というのが持論だが、ある種のフレームワークではその必然性がある。 O/RマッピングのフレームワークでPOJOにデータを詰めて返したい WebフレームワークでHTTPリクエストをPOJOに詰めてControllerクラスに渡したい (このあたりの議論はJavaのジェネリクスで,T.class や new T() ができず悩んだ話 (型パラメータのインスタンス化に関し、フレームワーク設計からケーススタディ) - 主に言語とシステム開発に関してによくまとまっている) ここで、これらのPOJO(Plain Old Java Object - 端的に言えばデータを格納する
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く