Javaに関するtrashtoyのブックマーク (91)

  • LombokとLombok-pg: Javaコードを減量する魔法のスパイス

    この記事はJavaアドベントカレンダー2014の12月24日分です。昨日は、 nagaseyasuhito さんによる Mavenでマスター/スレーブ構成のMySQLを起動して結合テストをするぞ という記事でした。Mavenでこんなことまでできるんだなぁということが分かる実践的なコードで、参考にしたいです! 明日は、いよいよアドベントカレンダー最終日、担当は kokuzawa さんになります。 コードをシンプルにできるラムダ式への注目 さて今年の日Javaアドベントカレンダーは、4月にJava 8がリリースされたこともあって、Java 8に関連した記事が多かったようです。その中でも、特にラムダ式への注目が際立ちました。 ラムダ式の最たる活用例 Stream APIについては、12月17日のcom4dcさんがデータ処理がどう簡潔に書けるかをコード例で示されています。また12月20日のRy

    LombokとLombok-pg: Javaコードを減量する魔法のスパイス
  • Javaのせいではなく使い方の問題だという意見 - ワザノバ | wazanova

    http://www.jamesward.com/2014/12/03/java-doesnt-suck-youre-just-using-it-wrong 1 comment | 0 points | by WazanovaNews ■ comment by Jshiike | 約3時間前 Salesforce.comのJames Wardが、エンタープライズ向けのJava webアプリに長く携わってきた経験からまとめた、「Javaが悪いんじゃなくて、使い方が間違ってる。」というブログのエントリー。 開発環境のセットアップのWikiが10ページもある JDKインストール、SCMレポをクローン/チェックアウト、ビルドを実行/アプリ起動の3ステップであるべき。 一貫してないデプロイ環境 ビルドを、開発 -> ステージング -> 番と進めるにあたりリスクを最小化するために、各環境で変わるの

  • JavaSE8でinterfaceにstaticメソッドを持てるようになったので - 日々常々

    Javaの古きアレなプラクティスの1つに、ユーティリティクラス*1をabstractで作成すると言うのがある。 public abstract class SomeUtil { public static String appendA(String str) { return str + "a"; } } ユーティリティメソッドappendAは、特に役に立たないが、引数のStringにAを足して返す物体だ。このクラスにはstaticメソッドしか含まないため、インスタンス化する必要はない。こういうクラスをabstractにすることにより、誤ってインスタンス化されることは無いと言う素晴らしい方法である。 「ねーよ」と言う言葉は堪えて頂きたい。それでは話が終わってしまう。 さて、JavaSE8ではProject Lambdaのついでにインタフェースにdefaultメソッドが追加された。ついでにs

    JavaSE8でinterfaceにstaticメソッドを持てるようになったので - 日々常々
    trashtoy
    trashtoy 2014/12/12
    「このクラスはユーティリティクラスのつもり」という設計意図を表現するためには private コンストラクタのほうが誤解がなくて良いと思う
  • Javaの型システムとコンストラクタ - プログラマーの脳みそ

    今回はJavaの型システムのコンストラクタについて考えてみたい。 Javaの型システム、あるいはJavaのオブジェクト指向において、コンストラクタという存在は特殊な存在だ。 コンストラクタ内からはそのクラスのインスタンスフィールドにアクセスできる。これは通常のインスタンスメソッドと同等のスコープであってstaticメソッドのそれとは異なる。しかし、コンストラクタを呼び出すにあたってはインスタンスのメソッドという体ではなく、staticメソッドのように(インスタンスではなく)クラスに属するものとして呼び出すことになる。(もっともnewという専用のキーワードを用いるのでそうは見えないかもしれないが) クラスやinterface、つまりJavaの「型」によるポリモフィズムの世界を考えるとき、コンストラクタはのけものである。継承関係を持つクラスであってもコンストラクタは継承されないし、オーバーライ

    Javaの型システムとコンストラクタ - プログラマーの脳みそ
  • おすすめオブジェクト指向練習方法 | サイバーエージェント 公式エンジニアブログ

    はじめに みなさんはじめまして。 アメーバ事業ゲーム部門でJavaエンジニアをやってる朝倉です。

    おすすめオブジェクト指向練習方法 | サイバーエージェント 公式エンジニアブログ
    trashtoy
    trashtoy 2014/08/07
    大筋は同意。メソッド切り出しの仕方のセンスがちょっと……という部分もあるけど初心者向けの説明として目をつぶるべきなのかしら。
  • Java Platform SE 8 API仕様

    The documentation for JDK 21 includes developer guides, API documentation, and release notes.

  • ホーム: Java Platform, Standard Edition (Java SE) 8リリース8

    Oracle | Hardware and Software, Engineered to Work Together

    ホーム: Java Platform, Standard Edition (Java SE) 8リリース8
  • Javaジェネリクス再入門 - プログラマーの脳みそ

    ジェネリクスでは、「型」を変数にした「型変数」というものを取り扱う。型変数で何が嬉しいかというと、メジャーな例ではコレクションAPIが挙げられる。java.util.Listとかjava.util.Mapとかのデータを格納するタイプのユーティリティクラスのことだ。 2004年にJavaのバージョンが5.0となるまでは、Javaにはジェネリクスの機能はなかった。なので、Listにデータを格納し、取得する場合は List list = new ArrayList(); list.add("hello!"); String str = (String) list.get(0); といったソースコードになる。 add()の引数はObject型で宣言されており、どんな参照型でもadd()することができた。 get()の戻り値もObject型で宣言されておりキャストが必要だった。このキャストはプログラ

    Javaジェネリクス再入門 - プログラマーの脳みそ
  • Java の throws 節では型変数が使える - 映画は中劇

    つい先だって知ったのですが、 Java のメソッドの throws 節では型変数が使えます。 8.4.6 Method throws / Java Language Specification これによって、投げる可能性のある例外の型が使い手側で変えられるようなメソッドを書くことができます。たとえば次のプログラムのように、例外の型と例外オブジェクトの生成を使い手にまかせる汎用の表明メソッドが書けます。 *1 class Checker { static <T extends Throwable> void check(boolean condition, Supplier<T> supplier) throws T { if (! condition) { throw supplier.get(); } } } class SomeException extends Exception {

    Java の throws 節では型変数が使える - 映画は中劇
  • java.net.URLをHashMapに突っ込むと大変なことになるのでやめろ、それどころかequalsを呼ぶだけでも大変なことに - TODESKING

    参照: http://stackoverflow.com/questions/2348399/why-does-java-net-urls-hashcode-resolve-the-host-to-an-ip 公式ドキュメントによると: public boolean equals(Object obj) … 2 つの URL オブジェクトが等しいのは、同じプロトコルを持ち、同じホストを参照し、ホスト上のポート番号が同じで、ファイルとファイルのフラグメントが同じ場合です。 2 つのホストが等価と見なされるのは、両方のホスト名が同じ IP アドレスに解決されるか、どちらかのホスト名を解決できない場合は、大文字小文字に関係なくホスト名が等しいか、両方のホスト名が null に等しい場合です。 ホスト比較には名前解決が必要なので、この操作はブロック操作です。 java.net.URL#equals

    trashtoy
    trashtoy 2014/06/09
    思わぬところで副作用(状態の変化)が発生するのでMapが壊れるよ、という話かと思ったら違った。これはひどい。
  • Javaの検査例外の存在意義 - Qiita

    このようなAPIではプログラマが「ファイルを開けなかったときの処理を忘れる」ことを防ぐことができない。 一方、検査例外を使えば「開けなかったときの処理」をプログラマが忘れることができない。 忘れた場合はコンパイルエラーになり、そもそも実行できないからである。 (簡単のためRuby風なAPIにしている) try { File f = File.open("dummy.txt"); f.write("Hello"); f.close(); } catch (IOException e) { // catchしない場合コンパイルエラー System.out.println("ファイルを開けませんでした。"); }

    Javaの検査例外の存在意義 - Qiita
    trashtoy
    trashtoy 2014/04/17
    検査例外の仕組み自体は良いのだが、個人的には RuntimeException が Exception のサブクラスとなっているのが非常にイケてない
  • Java8時代の文字列連結まとめ - きしだのHatena

    文字列の配列やリストを[〜]で囲ってカンマで区切って連結するという話、String.joinだとどう?とwatermintさんから指摘があったので、試してみました。 シンプル! public static String stringJoin(){ return "[" + String.join("],[", strarray) + "]"; } でも、1847msでした。改めて前後の文字を文字列連結してるところで時間かかってる感じ。 で、昨日のStringBuilder版はもう少し最適化できるので書き直します。 public static String stringBuilderJoin(){ StringBuilder s = new StringBuilder("["); for(int i = 0; i < strarray.length; ++i){ if(i != 0){ s.

    Java8時代の文字列連結まとめ - きしだのHatena
    trashtoy
    trashtoy 2014/04/09
    これは良いまとめ
  • Java8からはHashMapの性能のためにComparableを実装しておいた方がいい - interprism's blog

    こんにちは、andoです。 ついにJava8がリリースされたのでさっそくインストールしてみました。 Java8になってラムダ式を始め、多くの機能が追加されたのですが、既存機能についても性能改善が行われています。 人気がありそうな新機能の紹介は他の人にお任せして、今回はHashMapの変更点について確認したいと思います。 はたして既存のプログラムはJava8で実行するだけで、その恩恵を享受できるのでしょうか。 java.util.HashMap HashMapといえば使用頻度1、2を争うコレクションクラスでデータの検索、追加がO(1)で行え、 辞書的に使える事から簡易的なDTOやキャッシュ、データベースのレコード構造、さらにはListですむところでさえ数値をキーにして使う兵もいるというくらい良くも悪くも色々使えます。 それが速くなるのであれば、既存のプログラムも速くなるはず、ということでさっ

    Java8からはHashMapの性能のためにComparableを実装しておいた方がいい - interprism's blog
    trashtoy
    trashtoy 2014/04/07
    JavaのHashMapの実装を参考にしてPHPでHashMapクローンを作ったことがあるけど、本家ではさらにその先を行っていた
  • Java インナークラスを外部でインスタンス化する - Qiita

    a.newとか初めて見たのでびっくり。 因みにインナークラスを使うと特定のクラスにだけパブリックとかが実現できるので便利。 追記 ちなみに、classをインナークラスをstaticで宣言すればHoge.classに付随するPiyoが普通のnew文で作成できる。 Register as a new user and use Qiita more conveniently You get articles that match your needsYou can efficiently read back useful informationYou can use dark themeWhat you can do with signing up

    Java インナークラスを外部でインスタンス化する - Qiita
    trashtoy
    trashtoy 2014/03/27
    一番馴染みの深い static なインナークラスといえば Map.Entry (JDK 8 からはあまり目にすることもなさそうだけど)
  • New Feature Of Java SE 8

    New Feature Of Java SE 8 1. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.1 2. Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです 。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むこ とはできません。以下の事項は、マテリアルやコード、機能を提供することをコミッ トメント(確約)するものではないため、購買決定を行う際の判断材料になさらない で下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時 期については、弊社の裁量により決定されます。 Oracleは、米国オラクルコーポレ

    New Feature Of Java SE 8
  • あなたのJavaコードをスッキリさせる、地味に便利な新API 10選(前編) - Taste of Tech Topics

    こんにちは! アキバです。 ...T3ブログは初登場かもしれません。ハジメマシテ。 以後お見知りおきを。 いよいよ、2014年3月、Java8が正式公開されますね。 なんと言っても、Java8の注目機能はラムダ式ですので、ラムダ式や型推論に関する記事は多いです。 世の中で「Java8」と検索すると、皆さんいろいろと記事を書かれているので、おおよその事はこれで分かっちゃうような気がします。 が、 実は地味に便利なAPIが追加されていたりすることを最近知りました。 これはあまり触れられていないぞ、と。 というわけで、このエントリでは、あまり日語で情報の無い、しかし地味に便利なAPIに実際に触れてみます。 大事なところなので2回強調して書いてみました。 今回は、前編として4つ紹介します。 ※APIの紹介と言いつつ、コードにはラムダ式を使ったコードが普通に出てるので、ご了承ください。 (むしろ、

    あなたのJavaコードをスッキリさせる、地味に便利な新API 10選(前編) - Taste of Tech Topics
    trashtoy
    trashtoy 2014/03/13
    PHPでは10年以上前からexplodeで一発だったのが、Javaでは今までなかったという驚き
  • 「Javaが使われないのは、エンジニアが楽しくないからだ」 - 感謝のプログラミング

    面白い人に出会った。 彼を一文で表すと、 SIerにいるくせに技術が大好きで、コードを書きたくても書けない現状に嘆きつつ、 多額のローンを背負ってしまったため転職に踏み切ることもできず、夢と現実の狭間で苦しんでいる男だ。 この人の素直な感じがかなり好きで、出会いざますぐに心を開いてしまった。 やっぱりアツく技術的な話をしてくれる人は当に楽しい。 会社にいる人の5割はSSDって何?って人だし、6割はJavaJavaScriptの違いもわからない人で、8割はGoogle検索無しでコンソールに「Hello World」を出力させることもできないような人達だ。 実際に統計をとったわけではないけれど、これは全然大げさな話ではない。 「システムエンジニア」なのに、当にこんな感じなのだ。 その代わり、ExcelやWordを駆使して資料を作成する技術は素晴らしいものがある。 長時間の会議に耐えうる精

    「Javaが使われないのは、エンジニアが楽しくないからだ」 - 感謝のプログラミング
    trashtoy
    trashtoy 2014/02/28
    Javaは正しく使えばすごく楽しいんだけどね。OOPもろくに分からず正しく使える人が少ないから、静的型付けによる強力なシンタックスが単なる足枷となってしまっているという印象
  • GoogleのJavaコーディング規約

    Spring BootによるAPIバックエンド構築実践ガイド 第2版 何千人もの開発者が、InfoQのミニブック「Practical Guide to Building an API Back End with Spring Boot」から、Spring Bootを使ったREST API構築の基礎を学んだ。このでは、出版時に新しくリリースされたバージョンである Spring Boot 2 を使用している。しかし、Spring Boot3が最近リリースされ、重要な変...

    GoogleのJavaコーディング規約
    trashtoy
    trashtoy 2014/02/21
    何故インデントが2スペースなのか
  • 初心者のためのJavaラムダ式入門とJDKのインストール、IDEの環境構築

    2014年3月18日に一般公開予定のJava SE 8へのバージョンアップでは、新たな表記法として「ラムダ式」が追加されます。このラムダ式を使うことによって効果を発揮する数々のAPIも追加されることになり、今回のバージョンアップはJavaを使う人にとって無視できないバージョンアップとなります。 しかしラムダ式は今までJavaプログラミングをやってきた人でも前提知識なしにソースだけを見て理解するのは難しい内容となっています。この連載では、今までJavaの経験はあっても「ラムダ式は、まだ知らない」という人を対象にラムダ式について解説していきます。 JDK 8は2013年9月10日に開発者向けプレビュー版が公開され、2014年2月18日現在、Early Access版がリリースされています。 コラム「ややこしいJavaのバージョン番号」 Javaのバージョン番号について、ところどころで1.8のよ

    初心者のためのJavaラムダ式入門とJDKのインストール、IDEの環境構築
  • そのクソコード、Intellij IDEAでチェックできるよ

    愛知県でシステムエンジニアとして働く友人のMは、プロジェクトメンバの書くJavaのクソコードに苦しめられているそうです。Mはリードプログラマとして、プロジェクトメンバがあげてくる成果物(ドキュメントとコード)のレビューをする立場にあるらしく、提出されてくる数々のクソコードをTwitterでつぶやいていました。 Mを救うことはできるのでしょうか? もし、クソコードをすばやく見つけることができたら救えるのであれば、救える見込みはあるかもしれません。 コードの問題を見つける静的解析ツール クソコードとは、おおむね次のような問題のあるコードをさすようです。 潜在的バグ バグの可能性があるコード。 重複 機能追加やバグ修正を困難にしがちなコードの重複。 設計上の問題 クラスやパッケージ間の依存関係、多すぎるメソッド引数など。 慣習違反 プログラミング言語やライブラリの慣習、コーディング規約などに違反

    trashtoy
    trashtoy 2014/01/14
    読んでいるこっちまで静かなイライラが。。。