タグ

プログラミングとJavaに関するiwwのブックマーク (34)

  • コンポジションとは : JavaA2Z

    あるクラスの機能を持つクラスのこと。 特定のクラスの機能を、自分が作るクラスにも持たせたい場合に、継承を使わずフィールドとしてそのクラスを持ち、そのクラスのメソッドを呼び出すメソッドを持たせること。そうすることで、クラスに他のクラスの機能を組み込むことができる。 オブジェクト指向用語。 厳密なオブジェクト指向では、継承は「機能の継承」を目的とせず、「スーパークラスはサブクラスの一種である」といういわゆる「is-a」の関係を持たなければならない。 そのため、単に機能を持たせたい場合には、継承ではなくコンポジションとすることが推奨される。 メリットとして、「機能の継承」はクラスの関連図をイメージする際に分かりにくくなりやすいためそれを回避できる、メソッドをワンクッション置くことで融通が効く、といったものがある。また、コンポジションの対象となるクラスは、そのサブクラスも使用できることになる。 デ

    iww
    iww 2018/07/31
    継承しないでメンバとして持たせる方法。 is-aじゃなくてhas-a
  • Kotlin - Wikipedia

    Kotlin(コトリン)は、ジェットブレインズのアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、静的型付けのオブジェクト指向プログラミング言語である。 開発経緯[編集] Kotlinは、ロシア・サンクトペテルブルクにある、ジェットブレインズの研究所で生まれた。 ジェットブレインズ社は JavaRubyPython などのプログラミング言語による開発環境などを開発して販売してきた。Kotlinは、同社の経験を活かしJavaをもっと簡潔・安全になるように改良した産業利用向け汎用言語として開発され、2011年7月20日に発表された。 Java仮想マシン上で動作するため、Javaで書かれたプログラムと同程度に速くコンパイルされ同程度に速く動作するとしている。 Javaに望まれている機能であっても互換性を保つために実現できていない機能や、将来のJavaの仕様で実現が予定されている機能か

    Kotlin - Wikipedia
    iww
    iww 2017/06/19
    Androidは当分触らないからいいや
  • もういい加減「nullチェックをしたら安全」とかわけのわからないことを言うのはやめよう - Qiita

    (僕の主観で)クソな記事をたまたま読んでしまってもにょったので愚痴。 Safe Harbor Statement 以下の事項は個人の見解であり所属する組織の公式見解ではありませんし、明日になったら違うことを思っているかもしれませんがそういう類のものです。 某所で危険と言われていたコード public void hogeMethod(Hoge hoge) { //hogeを使った処理 hoge.doSomething(); return; } 安全な理由: NullPointerExceptionが発生しない 僕がいいたかったこと それ、NPEを握りつぶしているだけですから!!!!!!! (とくにJavaの世界においては)非検査例外というのはコーディングバグを示してくれるものですから、へんなnullチェックをいれるのではなく、積極的にNPEを発生させていきましょう。 こういうわけのわからない

    もういい加減「nullチェックをしたら安全」とかわけのわからないことを言うのはやめよう - Qiita
    iww
    iww 2017/06/05
    握りつぶしたいときもある
  • Java/ServletとJSESSIONIDのURL管理 - Glamenv-Septzen.net

    Servlet 2.5 今回主に取り上げるTomcat6, Jetty7で対応しているServlet 2.5の仕様を確認すると、"SRV.7.1 Session Tracking Mechanisms"で以下のように記されています。 SRV.7.1.1 Cookies Session tracking through HTTP cookies is the most used session tracking mechanism and is required to be supported by all servlet containers. The container sends a cookie to the client. The client will then return the cookie on each subsequent request to the server,

    iww
    iww 2016/06/07
    ;jsessionid=xxxx
  • Android Javaでフィールドにmプレフィクスをつけるのはやめよう - Islands in the byte stream

    Android Javaでは昔からAOSPのcoding style guidelineに則ったスタイルがとられることが多いようです。そのなかで、private fieldに "m" (member) や "s" (static member) などのプレフィクスをつけよ、というものがあります。 AOSP Java Code Style for Contributors  |  Android Open Source Project これはいわゆるハンガリアン記法の変種で、こういうやつですね。 class Recipe { private String mTitle; private List<String> mSteps; // ... } これについての態度はプロジェクトごとに様々ですが、たとえばクックパッド社のJavaのスタイルガイドでは明確に否定しています。 styleguide/

    Android Javaでフィールドにmプレフィクスをつけるのはやめよう - Islands in the byte stream
    iww
    iww 2016/01/25
    わかった、サフィックスにしよう。 もしくは、thisの省略の絶対禁止だ
  • Javaで1行ずつテキストデータを読み込むイディオムの変遷 - argius note

    テキストデータを読み込む場合、言語にかかわらず1行ずつ読み込んで処理します。ここではこのイディオムを"read-lines"と呼ぶことにします。 スクリプト言語なんかだと大抵、最初からforeachで済んでしまっていたりしますが、初期のJavaではちょっと面倒な手順が必要でした。 新しいバージョンではだいぶ簡単簡潔に書けるようになりましたが、今度はたくさんありすぎて、どれがなんなのかが良くわからなくなっています(大袈裟)。 そこで今回は、"read-lines"の変遷についてまとめてみました。 最近Javaを始めた方がバージョンが古い時に書かれたソースコードを読むときに役に立つ...かも知れません。 目次 基 BufferedReader (Java1.1~) Scannerと拡張for文 (Java5~) java.nio.file.Filesとtry-with-resources(J

    Javaで1行ずつテキストデータを読み込むイディオムの変遷 - argius note
  • StringTokenizer (Java Platform SE 6)

    java.util クラス StringTokenizer java.lang.Object java.util.StringTokenizer すべての実装されたインタフェース: Enumeration<Object> public class StringTokenizerextends Objectimplements Enumeration<Object> StringTokenizer クラスを使用すると、アプリケーションで文字列をトークンに分割できます。トークン化のメソッドは、StreamTokenizer クラスで使用されているメソッドよりもさらに簡単です。StreamTokenizer メソッドでは、識別子、数字、引用文字列は区別されません。また、コメントを認識してスキップすることもありません。 区切り文字 (トークンを分ける文字) は、クラスの作成時、またはトークンを得る

    iww
    iww 2015/02/10
    『returnDelims フラグが true の場合は、区切り文字もトークンとして返されます。』
  • [Java 5]オーバライドのミスを撲滅する@Override

    アノテーションを活用しよう! JDK 1.4まではjava.langパッケージはインターフェイス、クラス、例外(クラス)、エラー(クラス)の4種類の要素から構成されていました。Java 5では、ここに列挙型として「Thread.State」、注釈タイプとして「Deprecated」「Override」「SuppressWarnings」の3つが追加されています。 項では、これらの新要素の中からプログラミングでありがちなオーバライドのミスを撲滅する強力な効果を持つ「Override」を説明します。 注釈タイプは既存のJavaの文法との関連から「public @interface」という接頭語で表現されていますが、「Override」は「アノテーション型」と説明されており、前に「@」を付加してメソッドの前に定義することで、そのメソッドがオーバライドメソッドであることをコンパイラに通知できます

    [Java 5]オーバライドのミスを撲滅する@Override
    iww
    iww 2014/09/10
    アノテーション
  • S2-020類似攻撃のStruts1での対策方法 - Qiita

    恐ろしいことですが、実装が全然違うStruts2の脆弱性S2-020と同様の攻撃手法で、Struts1も脆弱性があることが分かりました。 http://www.lac.co.jp/security/alert/2014/04/24_alert_01.html ここではあまり明らかになっていませんが、原因は // Set the corresponding properties of our bean try { BeanUtils.populate(bean, properties); } catch(Exception e) { throw new ServletException("BeanUtils.populate", e); } finally { if (multipartHandler != null) { // Set the multipart request handl

    S2-020類似攻撃のStruts1での対策方法 - Qiita
  • クラスのインスタンスを1つに保つ(Singletonパターン)

    サーブレットのようなマルチスレッド環境下で共有リソースを扱うとき、複数のスレッド間で単一のオブジェクトを操作するようなプログラムが必要になることがあります。また、マルチスレッド環境以外でも、プログラム全体の情報を共有するオブジェクトや、生成に非常にコストが掛かるものの使い回しが利くオブジェクトのように、プログラム全体で1つのインスタンスだけを扱いたいこともあります。 小規模なプログラムなら、インスタンスを1つしか作らないという暗黙の規則を作り、注意深くコーディングすれば対応することはできるでしょう。しかし、プログラムの規模が大きくなってくると、そのような暗黙の規則だけではいずれ破たんしてしまいます。もともと1つだけのインスタンスを扱うように作られたクラスが、いつの間にか複数のインスタンスで扱われていたりすると、バグを引き起こす原因になります。 このような問題の解決には、クラスのstatic

    クラスのインスタンスを1つに保つ(Singletonパターン)
    iww
    iww 2014/07/24
    シングルトンでinstanceって変数名使うのは業界お決まりなのかな
  • Codespell – Java言語がそのまま呪文となる教育用3Dゲーム

    カリフォルニア大学サン・ディエゴ校の計算機科学者達が開発した Codespell は、一人称視点の3Dゲームなのですが、その一番の特徴は、プレイすることでJavaプログラミングを身につけられるという点です。 Codesp […] カリフォルニア大学サン・ディエゴ校の計算機科学者達が開発した Codespell は、一人称視点の3Dゲームなのですが、その一番の特徴は、プレイすることでJavaプログラミングを身につけられるという点です。 Codespellでは、プレイヤーは小動物ノーム(gnome)たちが住む土地にやってきた魔法使いです。ノーム達は過去に魔法を使って生活していたのですが、今は魔法をうまく使えなくなっています。魔法の呪文はJava言語プログラムで、物体を浮遊させるとか火を起こすといった7つの手持ちの呪文を使って、ノーム達を助け、火を消したり川を渡ったりといったクエストを解き、バッ

    Codespell – Java言語がそのまま呪文となる教育用3Dゲーム
  • 若作りするためのJavaコード - 谷本 心 in せろ部屋

    このエントリーは Java Advent Calendar 2012 の10日目として書きました。 なんか色々あって、公開が2日ぐらい遅れてしまってごめんなさい(><) 前日は、Hideki Kishida (@quicy) さんの「Xtend の Lambda とストリーム処理」です。 http://legacy-style.blogspot.jp/2012/12/xtend-lambda.html 翌日は、Katsumi Kokuzawa (@kokuzawa) さんの「WiiRemoteJで遊ぼう on OSX 10.8.7」です。 http://kokuzawa.github.com/blog/2012/12/11/wiiremotejdeyou-bou-on-osx-10-dot-8-7/ どちらも今風ですね! そんな中、若干、加齢臭が気になり始めたこの頃の私としては、 若さアピ

    若作りするためのJavaコード - 谷本 心 in せろ部屋
    iww
    iww 2013/01/09
    『Java7以降はtry-with-resourcesを使うことでリソースが自動的にクローズされるため、わざわざfinallyでクローズする必要はありません。』 そうなのか・・・
  • URI scheme is not "file"

  • Javaオブジェクトのメモリ使用量

    Javaオブジェクトのメモリ使用量を計測してみました。 計測を行ったJDKはWindowsの1.4.2_04です。 基的に、Javaではプリミティブ型以外の全オブジェクトを生成するときに new演算子を使用します。 つまり、メモリ確保が行われるタイミングはnew演算子が実行される時に限られます。 全てのオブジェクト フイールド数0 フィールドが一つも無いオブジェクトを生成すると、8byteのメモリを消費します。 Object obj = new Object(); フイールド数1以上 フィールドが一つ以上あるオブジェクトを生成すると、8+α byteのメモリを消費します。 α の値は、このクラスが保持するフィールドに依存します。 フィールドの型により、消費するbyte数が異なります。 byte / boolean 1byteを消費します。 short 2byteを消費します。 int /

  • Interruptされるタイミング - 西海岸より

  • スレッド終了のお作法 - 西海岸より

    マルチスレッドのプログラムはまともに書いたことが無く、迷ったのが実行し続けるスレッドの終了方法。 LoopThreadTest.java(最初の実装) public class LoopThreadTest{ public static void main(String[] args){ System.out.println("LoopThreadTest: start"); LoopThread thread = new LoopThread(); thread.setDaemon(true); //start LoopThread thread.start(); try{ Thread.sleep(4000); }catch(InterruptedException e){ //nop } //term LoopThread thread.notifyStop(); thread.in

    スレッド終了のお作法 - 西海岸より
  • Java7 Update6 で String クラスがさらにリファクタリングされていました - 地平線に行く

    2012年8月14日に登場した Java SE 7 Update6 で、またしても String クラスがリファクタリングされていました! そこで、そこがどういう風に変わったのかを詳しく調べてみました。 フィールド変数 count と offset が削除されました Stringクラスにあった4つのフィールド変数のうち、count と offset が削除されました。 /** The value is used for character storage. */ private final char value[]; - /** The offset is the first index of the storage that is used. */ - private final int offset; - - /** The count is the number of charact

    Java7 Update6 で String クラスがさらにリファクタリングされていました - 地平線に行く
  • JavaがC++に圧勝するコード例 - LLVMとコンパイラとVM

    Author:nothingcosmos(坂頂佑樹) IT系、特にVMに関して 周辺技術の紹介等をしています。 コメント・質問はお気軽にどうぞ。 LLVM wiki twitter:nothingcosmos

  • Javaちょっと調べたメモ(ファイルのMD5、ソケットのinterrupt) - torutkのブログ

    JDK6 Update10 Beta12(AMD64用)をインストールしたらインストーラが途中でエラーとなりました。ダウンロードしたファイルが完全ではないかと疑い、ハッシュ値(MD5)を確認しようと思い、JavaでファイルのMD5ハッシュ値を取る方法を調べました。 また、別件で作っているプログラムでソケットの受信を開始/停止できるようにしたかったのですが、スレッドに割り込み(interrupt)をしてもソケットのブロックした読み出しはInterruptedExceptionになりません。Java読書会の前回Java並行処理プログラミング」を読み直してソケットの同期I/Oでブロックしているスレッドをキャンセルする方法を確認しました。 ファイルのMD5を取る 以下の2つのクラスを使えば数行で実現可能でした。 java.security.MessageDigestクラス java.secur

    Javaちょっと調べたメモ(ファイルのMD5、ソケットのinterrupt) - torutkのブログ
  • Androidの端末IDを作る - 橋本詳解

    欲しいもの Android端末を識別したい ANDROID_IDという端末固有IDは使いたくない SIMのIDも使いたくない 機種変した時も移行させるとかめんどそう 他のアプリも使っているだろうし 変えれないと、ID漏れた時にセキュリティの人がトマホーク持って襲ってきそう 仕様 ANDROID_IDと時刻からMD5を作って、SharedPreferenceに他のアプリからは読めないpermissionで保存する事にした ID生成 1回目の呼び出しで生成、以後は保存された値を返す public String id(){ SharedPreferences pref = activity.getPreferences(activity.MODE_PRIVATE); String id = pref.getString("device_id", ""); if(id.length() < 1){

    Androidの端末IDを作る - 橋本詳解