JAVA関連のことを調べてみた2022年04月17日

JAVA関連のことを調べてみた2022年04月17日

Effective Java 第3版まとめ(項目5)

# 項目5.資源を直接結び付けるよりも依存性注入を選ぶ

## 書かれている内容

* 多くのクラスが一つ以上の下層の資源に依存している
* たとえば、スペルチェッカーは辞書に依存している
* このようなクラスが静的なユーティリティやシングルトンで実装されていると、
柔軟性に欠けてテストできない(例えばテスト用の辞書を使うことができない)
* スペルチェッカーに辞書を変更するためのメソッドを追加すると、扱いにくく、間違いやすく、並行な環境では機能しない
* 新しいインスタンスを生成するときにコンストラクタに資源を渡す
* または、コンストラクタに資源ファクトリを渡す
* Supplierインタフェースは、ファクトリを表現するには最適

元記事を表示

フォルダ量産

public static void main(String[] args) {

try{
for(int i=1;i<=作りたいフォルダ数;i++) { Path p = Paths.get("パス"+String.valueOf(i)); Files.createDirectory(p); } }catch(IOException e){ System.out.println(e); } }

元記事を表示

Javaでの乱数記述の仕方

# Javaでの乱数の記述の仕方について

乱数の表記表には複数種類存在する。

#### 1.Random関数を用いた記述
 Randomクラスは、疑似乱数を生成するためのクラスである。戻り値はint型であり、乱数のように見えるが、実際には一定の規則で生成されている数字。
 Randomクラスを使用するには`java.util.Random`をimportする必要がある。
#### ソースコード
~~~Java
import java.util.Random;

public class Main {
public static void main(String[] args) {
Random r = new Random();
int r = random.nextInt(➀);
//0以上➀未満までの間で乱数を取得する
}
}
~~~
import文も含めて1文にまとめることも可能である。`int r = new java.util.Random().nextInt(➀);`
また、コンストラクタに初期値(シード)を与えると、生成される疑似乱数列

元記事を表示

【Jackson】AnnotationIntrospectorでJsonGetter同様の動作を実現する

# TL;DR
– `AnnotationIntrospector`には`JsonGetter`同様の動作を再現するための明示的なメソッドは用意されていない
– `findNameForSerialization`を実装することで、`JsonGetter`同様の動作を実現できる

# 本文
## JsonGetterとは
`Jackson`では、名前が`getter`に当たるメソッドしかシリアライズ対象になりません。
一方、`JsonGetter`アノテーションを付与したメソッドは名前に関わらずシリアライズ対象となります。

“`java
// シリアライズすると{“foo”:1,”bar”:2}が出力される
class Src {
public int getFoo() { return 1; }
@JsonGetter public int bar() { return 2; }
}
“`

## やりたいこと
`Jackson`の挙動をカスタムして、特定条件で`JsonGetter`同様の動作をさせます。
今回は以下の`MyAnnotation`が設定されてい

元記事を表示

auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(ツール完成編)

# はじめに

前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック

元記事を表示

Javaプログラミングにおけるストリーム

## ストリーム (プログラミング)とは
メモリ領域やファイル、ネットワークに記載・格納されたデータを読み取る、
反対にそれらにデータを書き込むためのオブジェクトや、そのための機能を持つデータ型。
接続や切断、書き込みや読み込みなどを簡易な操作で行える。

## InputStream/OutputStream
Javaのストリームオブジェクトで
データをバイナリ形式で読み取り/書き込みを行う。

必ずしもバイナリデータをやり取りするわけではなく、
FileOutputStreamなど、ファイルへの文字の書き込みをバイナリで行う事もできる。

## バッファリング
ストリームオブジェクトがストリーム処理を、
一定のデータ量でまとめて行う事で、処理性能を上げられる機能。
バッファリングをしない場合、ストリームは1バイトずつ行われるが、
バッファリングをすることで、ストリームを最大1024バイトずつ行える。
Javaでは、BufferedOutputStreamクラスがバッファリング機能を提供している。

## Writer/Reader
J

元記事を表示

(初心者向け)Spring Data JPAの基礎知識

現在学習しているSpring bootの中で、Spring Data JPAを利用する機会があったので、復習も兼ねて投稿します。

## Spring Data JPAとは
Spring bootでデータベースにアクセスできるライブラリ/フレームワークのこと。

Spring Data JPAでは、JavaクラスとDBテーブルをつなぎ合わせてくれるHibernate(ハイバーネート)ライブラリを内部実装している。

## Spring Data JPAでDBを自動生成してみる
今回は練習も兼ねてMySQLとSpring Data JPAを繋げてみます。
## MySQLでデータベースの設定を行う。
### データベースの作成。
“`sql
create database db_sample;
“`
### ユーザーとパスワードの設定
“`sql
create user ‘username’@’localhost’ IDENTIFIED BY ‘password’;
“`
### 権限の設定
“`sql
GRANT ALL PRIVILEGES ON * . * TO ‘us

元記事を表示

[Docker][Java] Java プロセスのコンテナで jstat が採れない

docker コンテナで動かしている Java プロセスの jstat を採る話。

以下のように実行してみると。。

“`
$ docker exec -t –user 1000 {container-id} jstat -gc 1
“`

こんなエラーになりました。

“`
sun.jvmstat.monitor.MonitorException: 1 not found
at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.PerfDataBuffer.(PerfDataBuffer.java:84)
at jdk.internal.jvmstat/sun.jvmstat.perfdata.monitor.protocol.local.LocalMonitoredVm.(LocalMonitoredVm.java:68)
at jdk.internal.jvmstat/sun.jvmstat.perfdata.moni

元記事を表示

例外の学習

https://qiita.com/ts7i/items/d7f6c1cd5a14e55943d4

## 理解が深まったところ

– 多段の呼び出し階層への対応

### 検査例外

>Exceptionクラス配下のRuntime Exception以外のクラスが対象。
Javaがコンパイル時に検査を行う例外なので、try-catchで例外ハンドリングを行わないといけない。
何故このような仕様になっているかというと、検査例外は基本的に正しいプログラムを書いていても避けられない例外だからです。
例えば、ファイルが壊れたりしているとIOExceptionが起きますが、どれだけ頑張ってプログラムを書いてもファイルが壊れていたら防ぎようがありません。
同様にDB障害などでSQLExceptionが発生するのもプログラムではどうしようもありません。
そういった例外たちを集めて、「お前らがハンドリングを忘れないようにtry-catchの記述を強制させてやるぜ~」ってJavaがドヤ顔しているのが検査例外だと思えば良いでしょう。

検査例外とは、呼び出し元に何らかの対処を強制する例外である。
対処し

元記事を表示

サーブレットJSPについて

## サーブレットJSPの基本を学ぶ。

サーブレットJSP、業務でがっつり使ているが、UI的な。動的な画面表示のようなことは全くイメージもついていないので、ここで触っておく。

>TomcatにはWebサーバー機能はありますが、ApacheのWebサーバーとしての性能(高速処理、安定性)と同等にはなりません。
>WebサーバーとしてならApacheを使うのが一般的です。
>そこでHTMLや画像などの静的なコンテンツは処理速度が高速なApacheに処理させ、Javaサーブレットで作成された動的コンテンツをTomcatに処理させます。

まずは、ApatcheとApatche Tomcatの違いについてだが、Apatcheは静的コンテンツなどの配信や、動的リクエストの振り分け?などに特化しており、Tomcatは。その動的リクエストをうまくさばくことができるものである。名前は似ているが、やっていることは別物であることは覚えたい。
TomcatにもApatcheの機能があるということで、覚えやすくなるのではと思う。
### 全体のイメージ図

![image.png](https://qi

元記事を表示

Java開発環境を構築

## Java実行環境を構築

### Javaをインストールする

まずはJavaをインストールする。職場で使用しているので、Amazon Corretto 11 をインストールする。
公式のドキュメントから、Windows_×64のJDK .msiをダウンロード。

https://docs.aws.amazon.com/ja_jp/corretto/latest/corretto-11-ug/windows-7-install.html

※自動でJAVA_HOMEとPATHを通してくれているようだ。

もし、PATHが通っていなかったらPATHを通す。

https://www.javadrive.jp/start/install/index4.html#section3

https://qiita.com/sta/items/63e1048025d1830d12fd

インストールされているかを確認。

“`cmd
C:\Users\User1>java –version
openjdk 11.0.13 2021-10-19 LTS
OpenJDK Runtime En

元記事を表示

staticメソッドで非staticなDIオブジェクトを使いたい

# はじめに
staticメソッド内でmybatis用のmapper interfaceを@Autowiredして使いたかった時の話。
もちろんそのままだとstaticメソッドから非staticメソッドの参照だしそもそもinterfaceだしで使うことは出来ないので、回避策が必要。

# NGパターン
“`MyMapper.java
package com.my.mapper;

public interface PhoneInfoMapper {
int selectByHogeHuga(String hogeFuga);
}
“`
“`MyMapper.xml


【Java】正規表現で最後にマッチした文字列のみを置換する方法

正規表現で最初にマッチした文字列のみを置換する方法としてreplaceFirstメソッドが存在するが、最後にマッチした文字列のみを置換するreplaceLastメソッドはない。
探してみたところ、replaceFirstを応用して自作している人がいた為、使わせていただいた。

“`java:replace.java
public static void main(String[] args) throws Exception {

String str = “hoge 0123 PIYO 4567 hoge 890 FUGA”;

// 小文字アルファベットの1回以上の繰り返しを””abc””に置換
String result1 = replaceLast(str, “[a-z]+”, “abc”);

System.out.println( result1 ); // hoge 0123 PIYO 4567 abc 890 FUGA
}

public static String replaceLast(String str, String

元記事を表示

Stream/Optionalで例外をthrow出来ないからと処理を解体された話

# はじめに
上流のアーキテクチャをされている方が非検査例外から検査例外に変更したのを機に、投稿者の実装処理内のラムダ式を全部for文に変更して、動作チェックをこっちにぶん投げてきたので、小さなの抵抗と後学のためにラムダ式の検査例外を非検査化する方法を調べた際のメモです

# 前提
Javaのラムダ式にて検査例外(Exceptionを継承した例外)を処理した場合
“` java
private void func1() throws java.io.IOException {
java.util.List.of(1, 2, 3)
// 例外が実際に発生した場合の想定
.forEach(e -> {
throw new java.io.IOException();
});

java.util.Optional.ofNullable(“val”)
// 例外が実際に発生した場合の想定
.map(val -> {
throw new java.io.IOException();
});
}
“`
この場合だ

元記事を表示

コンピュータとオセロ対戦52 ~ネットワーククラス~

https://qiita.com/tt_and_tk/items/068f2afde6db637e189f

[前回](https://qiita.com/tt_and_tk/items/5249541e6bdf307c28ad)

# 今回の目標
ネットワーククラスを作成する。
# ここから本編
## 現在のディレクトリ構成

“`
MyNet2
├── Matrix.java
├── actFunc
│   └── 活性化関数クラス
├── layer
│   └── 層クラス
├── network
│   └── ネットワーククラス
└── tests
└── テストクラス
“`

## 修正点
全ての層で共通するデータ型を使用するため、ConvとMaxPoolingのforwardメソッドを変更しました。
また、二次元と四次元の相互変換のため、MatrixクラスにtoMatrix4dメソッドを、Matrix4dクラスにflattenメソッドをそれぞれ追加しました。

“`Conv.java
/**
* Doing forward propag

元記事を表示

Nablarch Webアプリケーションのデバッグ方法について

# はじめに
こんばんわ、きりです。
本記事は[Nablarchを使ってみよう](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17)のサブ記事として作成しております。

[Nablarchを使ったWebアプリケーションの作成](https://qiita.com/kirin1218/items/c537cb8a444ee59763cd)にて、NablarchのWebアプリケーションのテンプレートプロジェクトをダウンロードし、実行までを行いました。

今回は開発作業のお友達、デバッグの方法を整理します。
いくつか方法はあると思いますが、今回は
* waittコマンドを使ったデバッグ
* tomcatを利用したデバッグ

について整理します。

本記事以外のコンテンツは[こちら](https://qiita.com/kirin1218/items/242ee0f174f1cb12ef17#nablarch%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%

元記事を表示

Effective Java 第3版まとめ(項目4)

# 項目4.privateのコンストラクタでインスタンス化不可能を強制する

## 書かれている内容

* ユーティリティクラスは、インスタンス化されるようには設計されていない(インスタンスには意味がない)
* 明示的なコンストラクタがなければ、コンパイラはデフォルトコンストラクタを提供する
* ユーザにとってこのコンストラクタは、他のコンストラクタと区別がつかない
* 抽象クラスもうまくいかない。サブクラスを作成できるし、サブクラスをインスタンス化できる。継承するために設計されていると誤解される
* privateのコンストラクタでインスタンス化できないようになる
* privateのコンストラクタでAssertionErrorをthrowすることで、クラス内から誤って呼び出された場合の保険となる

元記事を表示

JUnit5(概要〜チュートリアル)

# はじめに
Junit5のユーザーガイドをベースにテストコードを書きました。
内容は、概要把握とチュートリアルレベルになります。

# 実行環境
OS:Mac
JUnit:JUnit5.8.2
Java:Amazon Corretto 8
Gradle:Gradle6.8
IDE:IntelliJ IDEA 2022.1 Community

# Junit5とは
現在リリースされている最新のJUnitです。
JUnit5は大きく分けて以下のサブプロジェクトから構成されています。

以下、ユーザーガイドより

## JUnit Platform
JVM上でテストフレームワークを起動するための基盤です。
このプラットフォーム上で動作するテストフレームワークを開発するためのTestEngine APIが定義されています。
加えて、コマンドラインからプラットフォームを起動するためのConsole Launcherや、
GradleとMaven用のビルドプラグイン、 JUnit 4ベースのテストランナーなどが提供されており、
あらゆるTestEngineを実行できるようになっています。

#

元記事を表示

Spring Bootを2.6にアップデートするとKarateテストが落ちる。その原因と対策

# 問題が置きた環境
– JDK 17
– Spring Boot 2.6.6
– Karate 1.0.0

# 現象
Spring Boot 2.4だったアプリを2.6にアップデートしました。

そうすると2.4では通っていたテストで次のような例外が発生しました。

“`bash
java.lang.NoSuchMethodError: ‘io.micrometer.core.instrument.TimeGauge$Builder io.micrometer.core.instrument.TimeGauge.builder(java.lang.String, java.util.function.Supplier, java.util.concurrent.TimeUnit)’

at org.springframework.boot.actuate.metrics.startup.StartupTimeMetricsListener.registerGauge(StartupTimeMetricsListener.java:119)
at org.springframe

元記事を表示

(Java)Value Objectの値がnull可の場合のString型変換のより良い対処法

こんにちは!株式会社OPTiMに所属しています川田剣士です。本記事ではOPTiMでアルバイトをしていてかなり悩んだ課題について共有しようかなと思います。テーマはValue Objectの値がnullの場合のString型変換についてです。では、よろしくお願いいたします。

# 目次
[背景](#背景)
[課題1.urlがnullの時にNullPointExceptionが生じる](#課題1urlがnullの時にnullpointexceptionが生じる)
・[対処法1.String.valueOf()を利用する](#対処法1stringvalueofを利用する)
・[対処法2.Objects.toString()を利用する](#対処法2objectstostringを利用する)
・[課題1の結論](#課題1の結論)
[課題2.null時にnullが挿入されない](#課題2null時にnullが挿入されない)
・[対処法1.文字列”null”が渡された場合、ExampleUrlのvalueにnullを渡すよう実装する](#対処法1文字列nullが渡された場合exampleurlのval

元記事を表示

OTHERカテゴリの最新記事