- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2023-11-25T11:59:09+09:00","default:irrp","irrp")
#author("2023-12-06T09:06:45+09:00","default:irrp","irrp")
→[[Java関連]]
→Java関連Tips
#contents
*サブトピック [#y639bdc0]
-Javaのリフレクション
*一般 [#p1fd5db0]
-[[Enumとてもつらい、でも負けない - エムスリーテックブログ>https://www.m3tech.blog/entry/enum-considered-painful]] 2023.12
-[[Java SEを網羅的にカバーした技術記事シリーズ #Java - Qiita>https://qiita.com/KenyaSaitoh/items/4711a078a851510bc4da]] 2023.11
-[[Java のpublic static void main なくなるってよ。 - Qiita>https://qiita.com/shupeluter/items/78a491fbaf84aaf119d9]] 2023.6
-[[Javaがパブリックスタティックヴォイドメインの呪文から解放される - きしだのHatena>https://nowokay.hatenablog.com/entry/2023/06/12/153755]] 2023.6
-[[Java 15で導入されたJEP 378 Text Blocksを試す - CLOVER🍀>https://kazuhira-r.hatenablog.com/entry/2023/02/23/222002]] 2023.2
-[[【Java勉強法】Java未経験からJava Silver取得 - Qiita>https://qiita.com/rikako_hira/items/ae208590d02a3bb91789]] 2023.1
-[[Index - Java Concept Of The Day>https://javaconceptoftheday.com/]] 2022.7
-[[イマドキのJava徹底入門(7) Java 14で正式に追加されたswitch式を使ってみよう | TECH+>https://news.mynavi.jp/techplus/article/imajava-7/]] 2022.5
-[[「Stringを==とequalsで比較する際の違いを教えてください」と面接官に言われたら - Qiita>https://qiita.com/Toshimichi/items/a3c6d65cdf9b77b5abe7]] 2022.4
--「以上によりStringは==で比較できないわけですが、String#internメソッドを使用することで、文字列を明示的に定数プールに格納することができます。これにより、LDC命令により確保された文字列と動的に確保された文字列を==で比較することが可能になります。」
-[[Java8の新機能に関するメモ>https://qiita.com/kamatama_41/items/c35e29d930b074a3cd2f]] 2021.10
-[[Javaのバージョン別、1行ずつファイルを読む方法まとめ>https://qiita.com/YujiSoftware/items/5975c0a93f5e58f6b9cf]] 2021.5
-[[あまり知られていないと思われる Java のインスタンスイニシャライザの紹介>https://satosystems.hatenablog.com/entry/20120905/1346805620]] 2012
-[[【Java】匿名クラス>https://nompor.com/2017/11/08/post-903/]]
--匿名クラスはコンストラクタでの初期化処理ができません。
--インスタンス化した直後であれば、匿名クラス本体のインスタンスなので、自前で定義したメソッドを呼び出せます。
--もし、匿名クラスで初期化処理をしたい場合は、この性質を利用するか、インスタンスイニシャライザを使用する方法が候補に挙がります。
-[[Local Variable Type Inference: Style Guidelinesを読んだ>https://kagamihoge.hatenablog.com/entry/2019/11/13/163855]] 2019.11
-[[弱い参照とな>http://qiita.com/yyyske/items/daa5c844647604e27e4f]] 2014.8
-[[戻り値が NotNull であることをアノテーションで表現できますか?>https://ja.stackoverflow.com/questions/1880/%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%8C-notnull-%E3%81%A7%E3%81%82%E3%82%8B%E3%81%93%E3%81%A8%E3%82%92%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E8%A1%A8%E7%8F%BE%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B]]
--@NonNull
--JSR-305 を導入する
-[[Java変態文法最速マスター>http://d.hatena.ne.jp/Nagise/20100202/1265131791]] 2010
-[[privateなコンストラクタのクラスについて>http://java-etc.cocolog-nifty.com/blog/2006/11/private_d99b.html]]
-[[インタフェースのキャスト>http://www.kab-studio.biz/Programing/OOPinJava/10/03.html]]
-[[ラベル付きステートメント>http://www.hcn.zaq.ne.jp/no-ji/reseach/20021120.html]]
*モジュールシステム [#if9acc95]
-※Java9以降の機能です。
-[[Javaのモジュールシステムの考え方をまとめてみた: プログラマの思索>https://forza.cocolog-nifty.com/blog/2022/10/post-8b7871.html]] 2022.10
--異なるJarであっても、同一パッケージ名が衝突する問題があった。モジュールは、パッケージを区別するための仕組み。
--パッケージはクラスを包み込み、モジュールはパッケージを包み込む。
-[[Javaのモジュールシステムは複雑性をより増している: プログラマの思索>https://forza.cocolog-nifty.com/blog/2022/09/post-e1ec72.html]] 2022.9
--[[モジュールシステムを学ぶ - Qiita>https://qiita.com/opengl-8080/items/93c8e0cf58654d5f73cb]] 2018
* ストリームAPI [#f28070a3]
-[[Java標準ライブラリのみでListを分割する方法 - エキサイト TechBlog.>https://tech.excite.co.jp/entry/2023/02/06/100000]] 2023.2
-[[Javaのsumはreduceで置き換えられる: プログラマの思索>https://forza.cocolog-nifty.com/blog/2022/11/post-f61799.html]] 2022.11
-[[Java配列を個別インスタンスでまとめて初期化する方法。ただしfor文テメーはダメだ - Qiita>https://qiita.com/payaneco/items/ea5db7b62d092927aed8]] 2022.8
-[[Java Stream API を無頓着に使うのはやめよう>https://qiita.com/yonetty/items/988af593152349ec2800]] 2021.7
-[[Java8 stream APIサンプルコード>https://qiita.com/rubytomato@github/items/93011c75ee4af6b59452]]
-[[Javaでリストの集約(Collectors.groupingBy)>https://qiita.com/KevinFQ/items/c4e7b5835487180d9659]] 2020.9
* Optional型 [#mf9b4c34]
-[[JavaのStream/Optionalに対する理解を深める - asoview! TECH BLOG>https://tech.asoview.co.jp/entry/2023/03/16/151427]] 2023.3
-[[Optionalの見直し – Java9で追加されていたメソッドが便利すぎることに今更気づいた | 豆蔵デベロッパーサイト>https://developer.mamezou-tech.com/blogs/2023/01/23/rethinking-optional-afterjava9/]] 2023.1
-[[クラス java.util.Optionalのおさらいメモ>https://qiita.com/rubytomato@github/items/92ac7944c830e54aa03d]] 2020.5
-[[`get()`を使うな 〜 敗北者の Optional>https://qiita.com/BlueRayi/items/ef46496ef2ef36b9cbb7]] 2020.3
*例外処理 [#f7477992]
-[[その例外、いつキャッチするの?>https://zenn.dev/koduki/articles/01ab5498d77a8a]] 2023.11
-[[凄腕エンジニアさんから学んだ例外の話 - Qiita>https://qiita.com/TairaNozawa/items/ab878eaa0b9f64b9854f]] 2023.6
--[[【凄腕エンジニアさんから学んだ例外の話】の補足 - Qiita>https://qiita.com/TairaNozawa/items/b4eeb1828c2bbfe0a178]] 2023.7
-[[Java のチェック例外と非チェック例外の考察まとめ>http://d.hatena.ne.jp/ebc_2in2crc/20120729/1343557350]] 2012.7.29
-[[Javaのチェック例外と非チェック例外について>http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1126696326]]
*ラムダ式/メソッド参照 [#u0e57c9f]
-ラムダ式でリターンするときにインクリメント演算子を後置してもインクリメント前の値が返される
interface MyLambda {
int apply(int x);
}
MyLambda l1 = i -> i++;
System.out.println("Lambda(i++)=" + l1.apply(0));
MyLambda l2 = i -> i + 1;
System.out.println("Lambda(i+1)=" + l2.apply(0));
【実行結果】
Lambda(i++)=0
Lambda(i+1)=1
-[[Javaのラムダ式を分解してみた - Qiita>https://qiita.com/haraitai00/items/2f53867f0691e8ed9364]] 2023.2
-[[Javaのラムダ式を順番に理解するための基礎知識 - Qiita>https://qiita.com/yoshitaro-yoyo/items/5a30915fc43a35ff10b4]] 2023.2
-[[メソッド参照の基本>https://programming-tips.jp/archives/202108/3/index.html]] 2021.3
-[[徹底解説! Javaのラムダ式はどういうもので、どう使えばいいのか!>https://engineer-club.jp/java-lambda-expression]] 2020.9
-[[Java 8: Preferred way to count iterations of a lambda?>https://stackoverrun.com/ja/q/7909293]] 2020.9
--ラムダ式の中で外のカウンタを使うには?
-[[Java 8のStream処理はここまで省略できる!>http://qiita.com/munieru/items/6c0dbada463e00429fd1]] 2017.8.19
*static初期化子とインスタンス初期化子 [#a3085659]
-http://www.genzou.sakura.ne.jp/class/inisharaiza_shokikasi.html
// static初期化子の例
public class MyTest {
static int[] hoge;
static {
hoge = new int[5];
for( int i = 0; i < 5; i++ ){
hoge[i] = i;
}
}
public static void main(String[] args){
for( int i = 0; i <hoge.length; i++) {
System.out.print(MyTest.hoge[i] + ",");
}
}
}
// インスタンス初期化子の例
public class MyTest {
static int[] hoge;
{
hoge = new int[5];
for( int i = 0; i < 5; i++ ){
hoge[i] = i;
}
}
public static void main(String[] args){
try {
MyTest m = new MyTest(); // インスタンス初期化子にはこれが必要
for( int i = 0; i <hoge.length; i++) {
System.out.print(MyTest.hoge[i] + ",");
}
} catch( Exception e ) {
System.out.print("例外発生:" + e.toString() );
e.printStackTrace();
}
}
}
-ArrayListを定義すると同時に初期化するサンプル
ArrayList<HogeEnum> list = new ArrayList<HogeEnum>() {
{ add(HogeEnum.A); }
{ add(HogeEnum.B); }
{ add(HogeEnum.C); }
};
*可変個引数の例 [#y02b00ee]
int sum(Integer... values){
int sum = 0;
for(int val : values){
sum += val;
}
return sum;
}
//呼び出し側
int sum = sum(1,2,3,4,5);
*ジェネリクス関連 [#b61b01f2]
-[[Javaのジェネリクス(総称型)とは?使い方をわかりやすく解説 | プログラミングを学ぶならトレノキャンプ(TRAINOCAMP)>https://camp.trainocate.co.jp/magazine/java-generics/]] 2021
-[[Javaジェネリクス再入門>http://d.hatena.ne.jp/Nagise/20101105/1288938415?sid=201781F]] 2010.11.5
-[[Javaのジェネリクスで,T.class や new T() ができず悩んだ話 (型パラメータのインスタンス化に関し、フレームワーク設計からケーススタディ)>http://d.hatena.ne.jp/language_and_engineering/20120502/p1]] 2012.5
**リストを渡してリストを返すようなメソッドでジェネリックを使ってキャストしなくてもいいようにする [#r8651a78]
public <T> List<T> hoge( List<T> list)
-http://www.eeb.co.jp/2007/11/_25.html
*Cで言うmemsetに当たる処理 [#r78bdfb5]
import java.util.*;
:
byte[] buf = new byte[200];
Arrays.fill(buf,0x20);