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

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

call graphなるintellijのpluginについて

# 概要

[コールグラフ](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B0%E3%83%A9%E3%83%95)を簡易に出すために[call graph](https://github.com/Chentai-Kao/call-graph-plugin)というintellijのpluginを利用して感じたことのメモ。
結論としては、有用そうだったが、Spring等DIを用いているソースコードの解析には今ひとつ足りないように感じた。

# モチベーション

なぜcall graphを利用しようと思ったのか?

ソースコードの改修を行うとき、このコードは一体にどこに影響があるのだろう、と悩むことは多い。
そんな時に私は修正箇所のメソッドを呼び出している箇所を洗いだして、影響箇所を確認している。

このような作業をする替わりに、スパッと一瞬で下記のようなコールグラフが図示できたら素敵だな、というのがモチベーションである。

![method.drawio.png](https://qiita-image-

元記事を表示

ABC264A~Dの解答

## はじめに
今回はDまでコンテスト中に提出したものです(久々の4完。嬉しい)。

では見ていきましょう。

## A – “atcoder”.substr()
問題文は[こちら](https://atcoder.jp/contests/abc264/tasks/abc264_a)

そのままです。
Javaではsubstringに相当しますね(第一引数は開始位置、第二引数は終了位置の一個後ろ)。
なお、文字列の一番最初の文字の添え字は1ではなく0なので第一引数はLではなくL-1であることに注意してください(Lは1文字目を1としているので1ズレている)。
“`A.java
class Main{

static Library System = new Library(java.lang.System.in,java.lang.System.out);

public static void main(String[] args)throws IOException{

//文字列を準備
String str = “atcoder”;

//L、Rの受け取り

元記事を表示

ドメインプリミティブについて

# はじめに
最近[セキュア・バイ・デザイン 安全なソフトウェア設計](https://onl.sc/8UiGd49)(以下、セキュア・バイ・デザイン)を読んだので、学んだことをアウトプットしようと思います。
今回は特に印象に残ったドメインプリミティブについてです。

# ドメインプリミティブとは
セキュア・バイ・デザインで紹介されている実装パターンのことです。
バリューオブジェクトとよく似ていますが、似て非なるものになります。
ドメインプリミティブはバリューオブジェクトの特性を持ちつつ、さらに以下の特性があります。
– プログラミング言語における基本データ型やStringなどのような汎用的な型を使用しない
– Nullを許容しない
– 不変条件をオブジェクトの生成時に確認する

# 不変条件とは
ドメインが持つ何が起きても変わることのない特性のことを不変条件といいます。
– 年齢の場合
– Nullでないこと
– 整数であること
– 0から150の間であること(150は人類最高齢が122なのでそこから余裕持った値)
– 携帯電話番号の場合

元記事を表示

【Spring】Entityから別のmodelに値をセットする

# はじめに

業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。

# 背景

Entityでセットされた値を、modelに格納したいと考えた。しかし、modelのsetterを呼び出し、setterの引数にEntityのgetterを呼び出すのは、フィールドの数が多い場合、可読性に欠けると考え、わざわざ上記のようなことをしなくてもmodelに格納することが出来ないかと思った経由から始まった。

# 実装

ちなみに、lombokを使用しているため、setterとgetterは記載していない。

### DBから取得・格納済みのEntityクラス

“`java:Entity.java
@Getter
@Setter
@Entity
public class Entity {
private String entityStringA;
private String entityStringB;
private String entityDateTime;
}
“`

### Entityクラスからセットするmodelクラス

“`

元記事を表示

【Java】ifを使わずListの値からEnumで定義した値のみを表示する

# はじめに

業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。

# 環境
Java:11(8でも問題ない)

# 実装

仕様は以下の通り

* aaa、iii、uuu以外は表示させない
* 表示優先順位は aaa > iii > uuu
* 重複して表示させない

“`java:呼び出し元
List tests1 = new ArrayList<>();
tests1.add(“aaa”); // 1番目に表示したい
tests1.add(“aaa”); // 重複するので除外したい
tests1.add(“uuu”); // 3番目に表示したい
tests1.add(“ooo”); // 除外したい
tests1.add(“eee”); // 除外したい
tests1.add(“iii”); // 2番目に表示したい
tests1.add(null); // 除外したい
tests1.add(“”); // 除外したい

List tests2 = TestType.getXXX(tests1);
tes

元記事を表示

【Java】複数の配列(List)をStreamを利用して一つのListにまとめる

# はじめに

業務でJavaを使うことになったが、少しブランクがあるため、記事としてまとめる。

# 環境

Java:11

# 準備

実際の業務では、DBから取得した半角スペース区切りの文字列(2カラム分)を配列化し、一つのListに格納する処理が必要であったため、配列の部分から記述する。

“`java
String column1 = “あああ いいい ううう”;
String column2 = “えええ おおお”;

// NULLか空の場合は長さ0の配列を代入
String[] column1Array = column1.isEmpty()
? new String[0]
: column1.split(” “);

// NULLか空以外の場合は半角スペース区切りの文字列を
String[] column2Array = column2.isEmpty()
? new String[0]
: column2.split(” “);
“`

# 複数の配列を一つのListにまとめる

“`java
// 上記で準備した配列をLi

元記事を表示

【Angularアプリケーション開発 #8】フロントエンドとバックエンドを繋げてみよう

## 目的
フロントエンドとバックエンドを疎通させること。
実際の開発現場に近い環境を再現し、経験と知識を増やすこと。

## 今回やること
なんちゃって従業員管理を作ります。
従業員一覧をDBから取得して、webページで表示するといった内容になります。
↓今回作ったwebページです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2689436/2415bd29-5552-41ae-8691-e2fa26ada783.png)

## 開発言語とフレームワーク
フロントエンド:javascript、typescript
フロントエンドフレームワーク:angular
バックエンド:java
バックエンドフレームワーク:spring boot
DB:mysql
※DBはdockerのコンテナに構築しています。ローカルに直でインストールしていても問題はありません。

## フロントエンド
MenbersComponentを作成します。
ngOnInitでバックエンドにリクエストを送る処理を

元記事を表示

Spring入門-URL叩いてファイル作成

Java界隈で良く使われているSpringBootでファイル作成処理を作っていきます。
![処理概要図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/951197/5c49c42a-d484-c644-33d1-ccfa7ea8a5fc.png)

UserがリクエストURL「localhost:8080/api」を叩いたら、任意の場所にファイル作成を行う。
Springプロジェクトだと「src/main/resources」に置くことが多い。
※参照ファイルは大抵の場合、resourcesに入っている

“`java:HelloController.java
package com.sample.app.controller;

import java.io.IOException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotatio

元記事を表示

静的コード分析ツールSonarQubeってこんなに簡単に使えるようになってたのか、の話

# はじめに

数年ぶりにSonarQubeを触ってみたくなり、試したところかなり簡単だったので、その感覚を残したく記事化してみました。

# SonarQubeとは

SonarSourceのプロダクトの一つであり、コード品質、コードセキュリティのチェックを実施するツールです。

https://www.sonarqube.org/

さまざまな使い方ができるのだと思いますが、簡単に使うためにはJenkinsなどのツールと同じようにSonarQube用のサーバーとして1プロセス立ち上げ、その中でチェックと、チェック結果を確認・参照することができます。

# 今回やりたいこと

MavenでビルドしているJavaプロジェクトに対して、ソースコードの品質が不安なので第三者チェックしてほしいと思うことがあると思います。その際に頼めるレビューアーがいないので最低限確認するためにツールにレビューをお任せしたい、ということがやりたいことです。
JenkinsのようなCI環境も手元にはありませんので、無しでいきます。

# 環境構成

ざっくりですが、以下の環境でやりました。

![image.p

元記事を表示

Spring boot_APIにてパラメータ名と変数名が異なる場合の実装方針

## 環境
– フレームワーク:Spring Boot 2.7.1
– Java 17

## 実装APIの種類
– HTTPメソッド=GET
– HTTPメソッド=POST(※ただし、Content-Typeが「application/x-www-form-urlencoded」であるもの

## やりたかったこと
実装上の変数名とAPIのIF上定義されているパラメータ名(リクエスト、レスポンス)を異なる名前にしたい。

本実装では、以下のように命名規則を違うものにしたい。
実装上の変数名:**キャメルケース**
APIのIF上定義されているパラメータ名:**スネークケース**

|種類|実装上の変数名 |APIのIFで定義されているパラメータ名 |
|———–|————|————|
| リクエストパラメータ | testId | test_id|
| レスポンスパラメータ | testName | test_name|

## 実装方法
### リクエストパラメータ
以下記事より、

元記事を表示

[Spring]ObjectProviderをコンストラクタインジェクションする

## ObjectProvider
`ObjectFactory`の拡張バリアントで、`ObjectProvider`を宣言することで、
`getIfAvailable`や`getIfUnique`を含むいくつかの追加のアクセスバリアントを提供できる。

cf. :
[ObjectProvider (Spring Framework API) – Javadoc](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/ObjectProvider.html)
[Using Spring’s ObjectProvider](http://rahulsh1.github.io/tech/2018/12/20/Using-Spring-ObjectProvider)

## ObjectFactory
`ObjectFactory`として宣言することで、`getObject()`呼び出しが必要になるたびに、
イン

元記事を表示

Java→Kotlin化メモ

# 起動時エラー

> kotlin_module is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.4/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.

## 対応
“`build.gradle.kts
jar {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
“`

# gradle build error
> xecution failed for task ‘:compileJava’.
> java.lang.IllegalAccessError: class lombok.javac.apt.LombokProcessor (in unnamed module @0xa5488cf) cannot access c

元記事を表示

役立つlombok入門(java)

駆け出しITエンジニアあ~さんです。
lombokの機能に関して疑問持つ方が多いという認識から、サンプルを以下に掲載いたします。

論より証拠!!
<題材のソースコード掲載>
“`java:AccountBean.java
package com.lombok.sample.model;

import lombok.AllArgsConstructor;
import lombok.Data;

/** アカウントモデル */
@Data
@AllArgsConstructor
public class AccountBean {

/** ID */
private String id;

/** 名前 */
private String name;
}
“`

@Data → getter&setterを自動生成
@AllArgsConstructor → インスタンスに関するコンストラクター生成
※詳しくはググってね☆

<以上のソースコードがコンパイル時に自動生成される内容>
“`java:AccountBean.class
package com.lombok

元記事を表示

eclipseで作ったSpringBootアプリをAWSを使って公開する#1

# eclipseからGithubにpushする
かなり手間取ったのでメモしておく。
Githubでトークン取得、リポジトリ作成ののち、EclipseでプロジェクトをGitにより連携する。

## 1. Githubで個人アクセストークンによる認証準備
### 1.1 アクセストークン作成
「Setting」→「Developer settings」→「Personal access tokens」と進んで「Generate new token」をクリックします。(https://github.com/settings/tokens)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2781422/957e2141-fb25-e89d-9c3c-f7b6e47f8218.png)

ここで出てくるトークンをコピーして保存しておく。ページ遷移すると消えてしまうので注意。

### 1.2 リポジトリの作成
「Repositories」→「New」→名前を入力して「Create reposi

元記事を表示

Javaの学習 ~varによる型推論~

### varとは
変数宣言時のデータ型を推論する(ローカル変数の型推論)場合に、データ型の代わりにvarを使って変数を宣言します。
※型推論はコンパイル時に行われる。
※ローカル変数の宣言にしか使えない。

#### 推論できるパターン
例えば、下記の変数aには整数リテラルの10を代入しているので、データ型はint型になります。
“`java
var a = 10;
“`

また、以下のようにメソッドの戻り値を受け取るのにも使うことができる。(メソッドの定義から型が判別できる為)
“`java
var b = sample();
“`
###### ダイヤモンド演算子
ダイヤモンド演算子とは、下記コードに使用されている「<>」のこと。
“`java
ArrayList c = new ArrayList();
//右辺の<>の中身(String)を省略することができる。
ArrayList c = new ArrayList<>();
“`
型推論において、下記のようなコードを記述したとすると、
“`java
var d

元記事を表示

[Jython]SikuliXによるRPA開発 ~はじめの一歩~

[
![600×200.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2513692/17ca4477-a1cf-537b-871f-907fb01cb19e.png)](http://sikulix.com/)

GitHubで公開しているSikuliXのサンプルプログラムに関する解説です。

https://github.com/singularity-effect/TextHelper

これはRPAの基本とも言える、ユーザーの代わりに画面を識別し、マウスやキーボードを操作する機能を使っているデモプログラムです。この開発中にSikuliXの仕様について気付いた点を投稿していきたいと思います。

## Finderクラスの基本

SikuliXを使う最大のメリットはこの[`Finder`][Finder]ではないでしょうか? かなり手軽に画像のマッチング操作を利用できます。

[Finder]: https://sikulix-2014.readthedocs.io/en/latest/finder

元記事を表示

Javaの学習 ~識別子~

### 識別子とは
変数やメソッド、クラスなどの名前のことを識別子と呼びます。
識別子の命名規則は、以下の3つです。

①予約語を識別子として使うことはできない
②使える記号はアンダースコア「_」と通貨記号(主に「$」)のみ
③数字から始めてはいけない

##### 予約語
予約語(キーワードとも呼ばれる)とは、プログラムの文を表現するためにあらかじめ用途が決められている単語のことを言います。
例えば、データ型を表現する「int」や「char」、繰返し等の構文に使用する「for」や「if」は予約後にあたり、識別子として命名することができません。
ただし、予約語単体ではなく、「intA」のように別の文字と組み合わせたりすることで使用可能にはなりますが、推奨はされません。

元記事を表示

マージしたチャートデータからテクニカル指標を計算する(DMI編)

# はじめに

前記事
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の学習 ~リテラル~

### リテラルとは
ソースコード中に記述する値のことです。
Javaには整数、浮動小数点数、真偽、文字の4つのリテラルがあります。
それぞれのデフォルトは、
整数→int
浮動小数点数→double
真偽→boolean
文字→char
となっています。

### 整数リテラル
##### long型
デフォルトの`int`ではなく`long`として扱いたい場合は、整数の末尾に「L」か「l」を付けます。
“`java
long l = 12345L;
“`
##### 2進数・8進数・16進数
10進数以外にも、2進数・8進数・16進数で記述することができます。

2進数・・・「0b」が接頭辞。
“`java
int a = 0b1000001011;
“`
8進数・・・「0」が接頭辞。
“`java
int b = 0413;
“`
16進数・・・「0x」が接頭辞。
“`java
int c = 0x10B;
“`
##### アンダースコア「_」
桁数の多い数値リテラルを見やすくするため、アンダースコアを使った表記がJava 7から導入されました。

アンダースコ

元記事を表示

Optionalについてメモ

## Optionalについて
java8で追加されたクラス。
値をラップしてくれて、nullチェックやnull制御をしてくれる。
これにより、`NullPointerException`の心配もなくなる。
## 使用できるメソッド
以下サイトを参照するのがおすすめ↓

[今更まとめるJava Optional](https://zenn.dev/ayumukob/articles/552d0c7b544838)
[クラス java.util.Optionalのおさらいメモ](https://qiita.com/rubytomato@github/items/92ac7944c830e54aa03d)
## まとめ
`Optional`は今後、使用する機会が増えるクラスではないかと思うので、より理解を深めていきたいです。

Optionalについて(基礎)の参考サイト
→[JavaのOptionaとは?使い方をパターン別にわかりやすく解説](https://www.sejuku.net/blog/60892)

元記事を表示

OTHERカテゴリの最新記事