Java

なぜ共通化のために継承を使うべきではないかをできるだけ簡単に説明したい4J

多重継承できない言語でなるべく誰でもわかるように共通化のために継承を使うべきではない理由をまとめた。 継承を使うべきでない理由は他にもあるがとりあえず一番簡単に納得できそうな理由について記載した。 多重継承できたとしても、共通化のために継承…

JavaのHashMapの実装を眺める会③

HashMap#resizeを読む とりあえずputValを読んでるがしょっぱなテーブルが初期化される前に呼び出すとresizeが呼ばれる * Initializes or doubles table size. If null, allocates in * accord with initial capacity target held in field threshold. * Oth…

JavaのHashMapの実装を眺める会②

そもそもクラスのJavaDocを読むべき Hash table based implementation of the Map interface. This implementation provides all of the optional map operations, and permits null values and the null key. (The HashMap class is roughly equivalent to …

JavaのHashMapの実装を眺める会①

HashMapってhashCodeで計算したハッシュからキーと値を引ける構造があって、ハッシュから値を引けるから早い、みたいな理解があって、あとはhashCodeがぶつかったらequalsの結果が等しいかチェックしてる、みたいな理解だったんだけどそもそも「ハッシュから…

JJUGで見たやつ

11:00 Javadocから考える・はじめる業務改善 Eclipse helpというのがあるのを知った 13:30 収益を支える中規模アプリケーション開発奮闘記 レビューで指摘しがちなやつをどっかにまとめて見れるようにしとくのやりたくなった 14:30 Java10まとめと、どうなる…

JJUGで見たいやつを先にざっくりめもしておく

10:00 キーノート/JavaでWebサービスを作り続けるための戦略と戦術/JUnit5 11:00 Javadoc 13:30 Spring 5/グラフデータベース 14:30 Java10/管理画面/トレースのやつ 15:45 Docker入門/スクラム 16:45 GraphQL/gRPC/サーバーレス 17:45 DDD

Javaのパッケージ名を決めるためだけにドメインを取った

適当にJavaでなんか作る時パッケージ名つけるじゃないですか でもドメイン持ってなかったんでいっつも悩んでたんですよね ドメイン取ってないのにcom.myapp.xxxとかパッケージつけたりするんですけどちょっとなんかもやっとするじゃないですか だからドメイ…

わかりやすいJavaEEウェブシステム入門でいきなりハマった(macOS Sierra)

p17で最初のプロジェクトを実行したところでデプロイに失敗しハマる 具体的には以下のような状況 glassfishは起動可能(ブラウザからlocalhost:8080でアクセスできる) が、NetBeans上からglassfishを停止できない(停止ボタンがグレーアウトしている) NetB…

Springのセッターインジェクション

セッターによるインジェクション @Component public class SetterInjectionServiceImpl implements SetterInjectionService{ //インジェクション対象 private Test target; //セッターによるインジェクション @Autowired private void setTarget(Test target…

Effective Javaを読んでいる㉘

例1 import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { List2<Object> list = new List2<>(); List<String> sList = new ArrayList<>(); List<Object> oList = new ArrayList<>(); //List<String>はList<Object>のサブクラスではな</object></string></object></string></object>…

Effective Javaを読んでいる㉗

再起型境界 import java.util.List; public class Test { //引数がCompareble2<T>型のリストであることが保証されるためOK private static <T> Comparable2<T> max1(List<Comparable2<T>> list){ Comparable2<T> max = list.get(0); for(Comparable2<T> t : list){ if(max.compareTo(t) > 0</t></t></comparable2<t></t></t></t>…

Effective Javaを読んでいる㉖

ジェネリクスを使おう 具象不可能型は配列を生成できない DelayQueueってなに →Delayedインターフェースを実装したクラスのみ格納できるキュー →Delayedインターフェースを実装したクラスがオーバーライドしたgetDelayedメソッドの戻り値が0未満でないと、要…

Effective Javaを読んでいる㉕

配列よりリストを 配列と総称型の違い(共変) SuperのサブタイプがSubならSubはSuperのサブタイプ ListはListのサブタイプではない Object[]Objectのサブクラス(あらゆるクラス)が格納できるが格納された配列の型のサブクラスの値しか格納できない(が、…

Effective Javaを読んでいる㉔

非チェック警告を潰せ ふつうに潰せるやつはつぶそうね はい 潰せないやつは@SuppressWarnings("unchecked")でつぶせ でかいスコープに@SuppressWarningsつけるな 出来る限り小さいスコープにつけろ!!!!!! 宣言にしかつけられないからスコープを縮める…

Effective Javaを読んでいる㉓

総称型のクラスを型パラメータなしで使うな List list = new BookList; list.add(new Magazine()); Book book = (Book)list.get(0); コンパイル通っちゃうけど実行時にキャストできなくてエラーになる。 ListとList¥<Object¥>の違い(なんか型パラメータの部分がマー</object¥>…

Effective Javaを読んでいる㉒

staticメンバよりstaticでないメンバを選べ enclosing class→内部クラスに対して外側のクラス 4つのネストされたクラス static member classes enclosing classのstaticなメンバである enclosing classのすべてのメンバにアクセスできる。 nonstatic member …

Effective Javaを読んでいる㉑

戦略を表すのに関数オブジェクトを使え 何についての戦略なのか?を表すインターフェースを作る 実装クラスを作る 利用者はインターフェースの形で宣言された変数に実装クラスを突っ込む 注意点 匿名クラスの形で実装する場合インスタンスが何回も作られる構…

JJUG CCC 2016 Fallにいってきた

見たセッション SpringはどうやってDIしているのか SpringはどうやってDIしているのか · Issue #35 · jjug-ccc/call-for-paper-2016fall · GitHub ・スキャンの対象はclassファイルを直接解析して判定してる ・インスタンスはClassLoaderから読み込んで生成…

Effective Javaを読んでいる⑲

型を定義するためだけにインターフェースを使いなさい インターフェースのクラスへの実装はクライアントがそのクラスのインスタンスによって出来ることをについて表現すべきである。 constant intercafe メソッドがなくて定数の定義だけしてるインターフェー…

Springの@Transactionalは非チェック例外をスローしたときにロールバックしてくれない

ロールバックしてくれ www.catalysts.cc @Transactional(rollbackFor = Exception.class) でできると

Effective Javaを読んでいる⑱

抽象クラスよりもインターフェースを選べ 抽象クラス 実装が持てる インターフェース ・実装が持てない(Java 8からstaticなメソッドは実装できるけど) ・クラスの階層にかかわらず実装出来る 既存クラスを抽象クラスのサブクラスしようとすると 既存クラス…

Effective Javaを読んでいる⑰

継承することを前提に設計する(そしてドキュメントを書く)か継承させないかどっちかにしろ Javadocに継承したらどうなるのか書いとけ overrideしたらどうなるのか書いとけ コンストラクタはオーバーライド可能なメソッドを呼んではいけない スーパークラス…

Effective Javaを読んでいる⑯

継承よりコンポジションを 継承はカプセル化を破る(???) サブクラスはスーパークラスの実装に依存する スーパークラスの実装が変わればサブクラスが破壊されるかもしれない スーパークラスが継承されることを前提に設計されていない場合、リリース毎に…

Effective Javaを読んでいる⑮

不変なクラスが素敵である理由 設計しやすい 実装しやすい バグがでにくい 不変なクラスを作るためのルール オブジェクトの状態を変えるメソッドを作らない。 継承できないようにする。 すべてのフィールドをfinalにする。 すべてのフィールドをprivateにす…

Effective Javaを読んでいる⑭

publicなクラスではpublicなフィールドではなくてアクセサメソッドを使おう なんで フィールドにアクセスした時に副次的な動作を入れられる カプセル化の恩恵を受けられる カプセル化の恩恵云々の話があんまりピンとこないのは多分大規模なアプリであったり…

Effective Javaを読んでいる⑬

良いデザインは情報を隠蔽する 良いデザインは内部でもっているデータや実装を出来る限り他のモジュールから隠蔽する。 モジュールはAPI経由でのみ伝達され、内部で何が行われているか他のモジュールは意識しない。 なぜ隠蔽するか 分離されたモジュールは個…

JJUG CCC 2015 Fallにいってきた(セッションの内容以外の話)

なんで行ったのか なんとなくこういうのに一度行ってみたかったから 行くまで Java EEのハンズオンを見よう(見よう?)と思ったので事前準備をした。 Sessions / JJUG CCC 2015 Fall(11月28日開催) | 日本Javaユーザーグループ ほかは何見るかあんまり決…

オーバーロードしてるメソッド間での引数が継承関係にあったらどっちのメソッドが呼ばれるんですかね!!!

public class OverloadTest { public static void method(Sexy sexy){ System.out.println("メソッドA"); } public static void method(SuperSexy superSexy){ System.out.println("メソッドB"); } public static void main(String[] args){ Sexy sexy = new…

結局アノテーションって何ができるんすか

なんかいろいろ出来るって程度にしか理解してないので一回じゃっとアレする。 現状知ってるのは、 なんかコンパイルエラーの条件に出来る(@Overrideとか) アノテーションがついてますよ、ってのを見て特別な動作をさせられる(AOPで差し込まれたメソッドの…

Effective Javaを読んでいる⑫

Comparebleの話 Comparable (Java Platform SE 7) おやくそく sgn(x.compareTo(y)) == -sgn(y.compareTo(x)) そして、x.compareTo(y)が例外を投げるなら、y.compareTo(x)も投げること。 関係が連続していること。 x.compareTo(y) > 0 && y.compareTo(z) > 0 …