6. コンパイルに時間かかりすぎ class C<T> { C() {} C(T t) {} C(C<T> c) {} static <U> C<U> m(C<U> c) {return c;} public static void main(String... args) { C<String> c = m(new C<>(m(new C<>(m(new C<>())))); // 1秒以下 } }
Java 8からこういう書き方が出来るようになっていたようです。(初めて知った) public class Main { public String getString(Main this) { // thisで自分自身が引数になっている return this.toString(); } public static void main(String[] args) { Main main = new Main(); System.out.println(main.getString()); //呼び出すときは何も書かなくてもよい } } 何がうれしいかというと、自分自身を呼び出すときにアノテーションがつけれるようになる。(そして処理が出来るようになる) なんか、おおっ!という感じ。 呼び出すときに何も書かなくてよいというのがものすごくJavaっぽくないので驚きました。 http://bl
一人でプログラムを書いてたりすると、環境によってはあまりコードの書き方には指摘を受けなくて困りますよね。プロになっても、曲がりなりにもちゃんと動くコードを書けてしまうとあまりに当たり前のことなんかは指摘されることも稀で、そのままある程度偉くなっちゃった日には、もはや自分で気付くしかなくなってしまいます。 FindBugsとか、Effective Javaなら使ったり読んでみたり読ませたりすることはできますが、それ以前のところって難しいんですよね。よいコードと言うよりそれが当たり前だと思われているので、指摘するにしても「こうすればいいよ」(アドバイス)じゃなくて「なんでこうしてないの?」(詰問)になってしまいがちです。 そこで、最近そういうJavaニュービーに指摘している(したい)ことの多い、Javaの基礎的な事柄をまとめてみました。ワタシJavaチョットデキルって人は、これ以外にもやりがち
夜中に8/15頃のツイートが回ってきた。 Java 8u60 adds reflection on lambda param names DSLs https://t.co/cflxFK468e Hash-Literals https://t.co/5rOCrrckcB pic.twitter.com/NEzj4X3Bt1— Benjamin Weber (@benjiweber) 2015, 8月 16 曰く Java8u60でラムダのパラメーターの名前に対してリフレクションができるようになってるよ というわけで 早速、件のツイートにあったレポジトリーをダウンロードして(mavenレポジトリーにはない…(´・ω・`))、プロジェクトに追加して、試してみた。 コード import com.benjiweber.typeref.NamedValue; import java.util.Col
この両者は、似ているようでいて、基本的には別モノです。表にしてみます。 Groovyのクロージャ java8のlambda式 導入時期 2003年 2014年03月 ローカル変数へのアクセス 読み書き可能 実質的にfinal(変数そのものに対しては読み込みのみ) 実装方法 Closure型のインスタンス MethodHandle, invokeDynamic.. 型推論の根拠 Closure<T>のTで返り値、@ClosureParamsで引数 FunctionalInterface(SAM型) 記法 { 引数 -> 本体 } { 本体 } {-> 本体 } (引数) -> { 本体 } (引数) -> 式 () -> { 本体 } 暗黙の動的なthis delegateにより実現 - 性能 ローカル変数をenclosingするため間接参照にするためのオーバーヘッドあり 性能上のオーバーヘ
以前、こういう記事を書きました。 mike-neck.hatenadiary.com 僕は、世間的にあまり知られていない人間なので、この記事があまり伝わっていなかったのでしょう。ちょっと恐れていたことがありました。 JJUG CCC 2015 SpringのセッションF2で、このような発表がありました。 ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring) from Yuuki Fukuda www.slideshare.net これの33ページのコードにはリソース解放漏れがあります。 FIles.lines(path).lines().forEach(System.out::println); このバグの可能性のあるコードがJJUG CCCというかなり規模の大きくなってきた大舞台でサンプルコードとして紹介されてしまいました。規模の大きいイベン
DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (2019 Update) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://soo.gd/irt2 } ...............................................
背景Java8にて、インターフェースにdefaultメソッド(メソッド定義と実装)を定義できるようになりました。 しかし、その実装においてObjectクラスが持っているメソッド(toString()とかequals()とか)は、インターフェース内でdefault実装として定義できないようになっています。(コンパイルエラー「A default method cannot override a method from java.lang.Object」) 「なんでかなぁ~」と思ってちょっと調べてみたら、以下の記事を見つけました。 ちょっと要約ちょっと要約してみます。 #自分の解釈を一部入れています。 #英語に不自由のない方は上記を見てもらえればいいかと思います。 (質問者) defaultメソッドは、Javaの中で新しい良いツールだ。 しかし、私がインターフェースにtoString()のdef
【東京】◆Java SE 8勉強会◆女子部もラムダ式に挑戦! - Java女子部 | Doorkeeper に参加してきました! 遅刻してしまって、前半の『Java SE 8の基礎解説』には出れなかったんだけど、 後半の『ラムダ式ハンズオン』で前半の『Java SE 8の基礎解説』で勉強した内容を試してみよう! っていう感じだったので十分楽しめました! 参加者のみなさんは、(会場で手を挙げてアンケートとってたけど、)GitHub使った事ない人がほとんどで、 GitHubに自分のリポジトリありますかって質問に2人しか手が挙がらない感じだった。 でも、GitHubからPJをもってくるところとか、PJをIDEで開くところとかを、 運営の人が丁寧に教えてあげてて、初心者歓迎の言葉にうそはなかったんだ!と思った!*1 1時間半のハンズオンってことだったので、内容は絞ってたけど、 それでも、難しそう!
LL から Java に移行した人がはまりがちなこと こんにちは。Java 初心者です。 Java 初心者、得に LL から Java に来た人にありがちな問題について社内向けに書いたものをオープンアンドシェアさせていただきます。 前提として、我々は Java 8 でガンガン攻めているということをご承知おきください。 また、自分がこの数ヶ月で「うわー。こうしとくべきだったのかー」と気づいたやつをドヤ顔で語っているということにもご注意ください。 【追記】 対象は中規模 B2C の場合です(中規模というのは facebook より小さいという程度の意味です) 例外を握りつぶさないようにしよう Eclipse が生成する以下のようなコードをそのまま残しているケース。 これは言うまでもなく良くないですね。デバッグが困難になります。 try { } catch (IOException e) { e
「何をいまさら」な感じの機能追加だけど、Java 8 から 標準のクラスライブラリで Base64 エンコーディング できるようになった。これはこれで嬉しいことなので、使い方とそのパフォーマンスをメモっておく。 使い方 まずはデモコードから。 エンコーダは以下のメソッド呼び出しで得られる 3 つの種類がある。 Base64.getEncoder() Base64.getUrlEncoder() Base64.getMimeEncoder() 対応するデコーダがそれぞれ用意されている。 Base64.getDecoder() Base64.getUrlDecoder() Base64.getMimeDecoder() Base64.getUrlEncoder() で得られるエンコード文字列は、普通の Base64 エンコーディングではファイルパスや URI での利用時に問題となりうる +/
今回も前回の記事につづき、Java8による変更点で未だあまり紹介されていないポイントを記事にしようと思う。 今回はJava8のHotSpotVMの話。Java8ではJEP122が取り込まれ、VMのメモリモデルが変更された。JEP122のタイトル「Remove the Permanent Generation」から想像できるとおり、Java8のHotSpotVMからは従来のPermanent領域が無くなった。 なぜ、こういった変更が行われたのだろうか?また、元々Permanent領域に格納されていた情報は何処にいってしまったのか?JVM付属のツールにどういった影響があるのか? 今回の記事ではこの点をまとめていこうと思う。 なお、HotSpotVMのメモリモデルについて詳しくない方は、先にこちらの項番(「補足 – HotSpotVMのメモリ構造概説)を読んでいただくとスムーズに読み進められるだ
前回から 1 ヶ月以上経ってしまいましたが、今回から Date and Time API の使い方について見てゆきたいと思います。Java EE でも GlassFish 4.0.1 Preview や WildFly 8.x が Java 8 を正式サポートしており、IBM WebSphere AS も年内には Java 8 に対応するという話が出ており、今後 Date and Time API を活用する機会は増えていくことでしょう。 WebLogic Server に関する注釈: 次期リリース WebLogic 12.1.3 は Web 層に対する Java EE 7 仕様の先行取り込みが最優先事項であるため、Java 8 (特に Lambda)には対応しない公算が大きいです。公式には 12.1.4 までに Java 8 対応を完了させるというマイルストーンだったと思います(間違って
毎年6月にEclipse本体や関連プラグインなどがまとまって一斉にバージョンアップを宣言するEclipseのRelease Trainが今年も行われ、Eclipse 4.4、コード名Lunaがリリースされました。 Eclipse 4.4 Lunaの最大の目玉は3月に登場したJava 8への対応です。 ラムダ式や新しい日時APIなどのJava 8の新機能に対して、Eclipseのコードフォーマット、クイックアシスト、リファクタリング機能、コンパイラなど包括的に対応しています。そのほかの新機能は、OSGi R6サポート、Workbench UIでダークテーマの追加などの改善、PHP開発ツールパッケージのアップデートなど。 Eclipseの日本語化プラグインおよび日本語版ディストリビューションのPleadesも、すでにEclipse 4.4 Luna対応リリースを行っています。 Pleadesは
Caliper や JMH などを試してみたが、案外あれは使うのが難しかったり、インストールが難しかったり、結果がよみづらかったりする。 Perl 5 に標準添付されているベンチマークフレームワークであるところの Benchmark.pm と同じぐらい気軽な感じで使えるベンチマークフレームワークが Java 8 用にあれば便利なのではないか、と思ったので作ってみた。 https://github.com/tokuhirom/nanobench 先日つくった HTML escape に関するマイクロベンチマークを nanobench を使って書きなおしてみる。 package me.geso.microbenchmarks; import me.geso.nanobench.Benchmark; import org.apache.commons.lang3.StringEscapeUtil
連載目次 前回の「ラムダ式で本領を発揮する関数型インターフェースとStream APIの基礎知識」では、ラムダ式を使うことで本領を発揮する汎用的な関数型インターフェースとStream APIの概要を見てきました。 今回は、前回に引き続きStream APIについて見ていき、主なメソッドとその使い方を学んでいきましょう。 Streamの生成 Stream APIを使うには、Streamのインスタンスを生成しなければいけません。まずは、そのStreamインスタンスを生成する方法を見ていきましょう。 配列やCollectionなどからのStreamの生成 Streamは配列やCollectionなどから作成可能です。まずは配列やCollectionからStreamのインスタンスを生成する主なメソッドを見てみましょう。下記のものが主なメソッドです。 呼び出し元クラス/インターフェース メソッド 概
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く