JAVA関連のことを調べてみた2021年06月21日

JAVA関連のことを調べてみた2021年06月21日

VSCodeでserialVersionUIDを自動生成したい!【2021/04~】

# こんな人のための記事

Language Support for Java(TM) by Red Hat では `0.77.0 (April 15th, 2021)` 以降、
`Serializable`の実装クラスで `serialVersionUID`が未定義のクラスに対して
Warningが出ないようになりました。

え!? Warningが出なかったら、Quick fix から
`Add generated serial version ID` できないじゃん!!

# 見つけるのはWarningを消す記事ばかり

大体の「Warningを消したい」サイトには、アノテーションを追加するか

“` ..settings/org.eclipse.jdt.core.prefs
org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore
“`
を追記しろという話でした。

逆手に取りましょう。
デフォルトが`ignore`になったなら、出すために`obey`を追記しよう!

“` ..settings/o

元記事を表示

【Java】Map+繰り返し+条件分岐をした際にうまくいかなかった原因

#起こった問題
Listの中に入っているMapを繰り返し処理で取り出して条件分岐させたのですが、うまくいきませんでした。

##問題のコード

“`java
List> list = new ArrayList>();
Map map = new HashMap();
map.put(“name”, “hello”);
map.put(“name2”, “hello2”);
list.add(map);
for(Map map2 : list) {
if(map2.get(“name”) == “hello”) {
System.out.println(“hi”);
}
}

// =>表示されない
“`

##原因
Javaの文字列比較で==演算子は使うことがNGだったようです。
簡単に紹介すると
比較している内容が
メモリ上のアドレスを比較するのか(==演算子)
メモリ上のアドレスに置いてあるデータ

元記事を表示

双方向性マップ

この記事では、Androidで双方向性マップを使う方法について記載しています。(Javaでも使えます)

### 双方向性マップ
双方向性マップは、「keyを指定してvalueを取得する」だけでなく、「valueを指定してkeyを取得する」ことが出来ます。

### 使い方
双方向性マップのライブラリはいくつかあるようですが、ここではcom.google.guavaのBiMapを使います。
ライブラリは、MavenまたはGradleで依存関係を指定することで使用できます。

“`
dependencies {
implementation(“com.google.guava:guava:30.1.1-android”)
// Javaの場合は 30.1.1-jre
}
“`

「valueを指定してkeyを取得する」場合は、inverseメソッドをコールすることで、keyとvalueが反転したMapが取得できます。

“`kotlin
val userId: BiMap = HashBiMap.create()
userId.pu

元記事を表示

[Web/まとめ] JUnit5 で Mockitoを利用する方法

### 背景
現在、担当中のjava moduleで Spring 2.3系から Spring2.5へmigrationを行なっている。
その際に、test周り、特にmockitoの移行で若干ハマったのでメモ。

特に、以下の英語LINKがよくまとまっていたので、この内容を元に要約してみる。
https://mincong.io/2020/04/19/mockito-junit5/

**なお、自分のMockito + Spring boot test frameworkの知識補充のために記載しているので、WEB Pageの丸翻訳というわけではなく、自分なりの理解や補足を加筆している。 なので、LINKの中で初めて知ること、わからないメソッドなどは適宜調べて自分なりのオリジナルまとめとなっている。**

### Junit5で Mockitoを利用する方法
以下の3つの方法があり、各方法での実装例や方法だけではなく、メリデメについてもリストしていく。

– `MockitoExtension`
– `MockitoAnnotat

元記事を表示

開発プロセスとSpringBootについて

#Java第3回
自分用のメモです。

##Webアプリケーションとは
* ブラウザ上で利用できるアプリケーション
* HTML/CSSやTCP/IPの基礎やブラウザの挙動なども理解する必要もある
* これら全てできるエンジニアのことをフルスタックエンジニアと呼ぶ

##Webアプリケーションでよく使う用語
クライアントとサーバー
* クラサバ構成はクライアントがブラウザからアプリケーションを起動し,サーバーが要求を受け付け,プログラムを起動し, その結果をクライアントに返す
* C#,VB.netがよく使われる

##リクエストとレスポンス
* クライアントからサーバへHTTPリクエストを送る
* サーバはそのリクエストに対して処理をした結果をレスポンスとしてクライアントへ送る
* API(WebAPI)があり,部品として使用することができる.これもリクエストを送るという意味で使うが「叩く」ともいう.
* アプリケーションサーバからブラウザに返すというのがレスポンスの仕組み

##通信
* Uniform Resource Identifier, Uniform Resource

元記事を表示

java用語集

①クラス プログラム実行に必要な処理をまとめた設計図

②メソッド いくつかの処理をひとまとめにしたもの
 インスタンスメソッド インスタンスに紐づけられたメソッド インスタンス固有の振る舞いを表す
 クラスメソッド クラスに紐づけられたメソッド クラス全体の固有の振る舞いを表す
 ※車クラスがあった場合に、インスタンスメソッドは1台の車インスタンスごとの振る舞いを表すのに対し、クラスメソッドは車全体の振る舞い。

③引数 メソッドに渡す値 入力値

④戻り値 返ってくる値 出力値
※和を計算するメソッドを作成した場合、数値が引数、和が戻り値

⑤変数 データを一時的に格納する箱
 
⑥データ型 取り扱うことができるデータのタイプ

⑦整数型 (byte型、short型、int型、long型)

⑧浮動小数点数型(double型、float型)

⑨文字型(char型)

⑩論理型(boolean型)

⑪インターフェース クラスに含まれるメソッドの具体的な処理内容を記述せず、変数とメソッドの型のみを定義したもの

⑫インスタンス クラスから作られるオブジェクト(実体)

⑬文字

元記事を表示

ラムダ式を使った配列の実験(Java編)

ラムダ式を使った配列の実験(Java編)です。

“`Java
package nogizaka
// ラムダ式の実験プログラム
// 2021/6/20 新規作成
// Author 乃木坂好きのITエンジニア

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

//ラムダ式実験プログラム
public class hairetsu_test {
public static void main(String[] args) {
//配列
List data = new ArrayList(Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12));
//ラムダ式で3で割り切れない数字を要素から削除する
data.removeIf( (Integer i) -> { return i % 3 !=0; } );
System.out.println(data);
}
}
“`

元記事を表示

SpringBoot のアノテーションについてのメモ

最近勉強を始めたフレームワークなので、お勉強がてら色々書いてみました。
そのうち何かこいつを使って試作してみたいですね。

# DI について

## @Autowired

一部の変数宣言に@Autowired を付与すると、DI の対象クラス(コンポーネントクラス)を探し、その変数にコンポーネントクラスのインスタンスを割り当ててくれます。

以下のクラスが対象です。

– @Component
– @Controller
– @Service
– @Repository
– @Configuration
– @RestController
– @ControllerAdvice
– @ManagedBean
– @Named
– @Mapper
– @Bean

DI の対象ではないクラス(上記アノテーションが割り当てられていないクラス)のメンバに対して@Autowired を指定すると実行時エラーが出ます。

## @Scope

このアノテーションに引数を指定してクラスに付与すると、そのクラスのライフサイクルを指定することができます。
指定できる引数は以下の通りです。

|

元記事を表示

【Java】AtCoderのABC-206に参加しました(レート:223→231)。

こんばんは。

2021/6/19に、AtCoderのABC-206に参加しました。
レートは以下の通りとなっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402487/6c76bf03-f145-c640-8417-203232a77109.png)

C問題まで突破し、順位は5887/9029でした。
レートは+8で231へ。久々にプラスで嬉しいけど、挽回までまだまだ時間がかかりそうです。
C問題で一度WAを出してしまっただけで、このレートかあ・・。

###A問題

定価206円のエナジードリンクを1本N円で販売。
消費税率1.08を乗じたうえで、定価206円を上回るかどうか?

“`java
import java.util.Scanner;

public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
long n =

元記事を表示

バッチアプリにおけるOpentelemetryでの分散トレーシング検証メモ

# はじめに
Opentlemetryの分散トレーシングについていろいろ調査したが基本的にWebアプリのトレーシングに関する内容がほとんどで、APIをコールするBatchアプリについてトレーシングしたい場合の方法がわからなかったので、BatchアプリにおけるOpentelemetryの検証を行った。
今回はその検証内容についてメモとしてまとめる。

実現したい分散トレーシングのイメージは下図のとおりで、Batchアプリの起動から終了までの間を1Traceとしてトレーシングするのが目標。

![分散トレーシング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177076/1c888261-bec8-f6e5-b9af-27fa0ed01893.png)

利用するバージョンは下記の通り。

* opentelemetry:1.0.1
* Zipkin:2.23.2
* Java:OpenJDK 11.0.2

# 検証1:Webアプリ側のトレーシング検証
WebアプリのWebApp01に対してAPI Ca

元記事を表示

JavaのSSLSocketを使う

#はじめに
JavaのSSLSocketを使って暗号化通信してみる。ついでにクライアント証明書も。
まずはサーバ側。

#証明書の準備
サーバ側はWebサーバで使う証明書と同じく、サーバ証明書・秘密鍵・CA局証明書がまずは必要。
これをまとめてpkcs12形式にしておく。
クライアント証明書を使う場合はクライアント証明書のCA局証明書も使う。こちらは秘密鍵なしで使えるJKS形式で。

#サーバ側証明書の読み込み
サーバ証明書は秘密鍵・CA局証明書とセットにしたpkcs12ファイルを読み込む。
FileInputStreamで開いて、java.security.KeyStore の load で読み込む。
読み込んだら javax.net.ssl.KeyManagerFactory の init に指定する。

クライアント証明書用CA局証明書も KeyStore の load で読み込むが、KeyManagerFactory ではなく、javax.net.ssl.TrustManagerFactory の init に指定する。

コードとしては以下のようになる。

“`
impor

元記事を表示

Visual Studio Code で Java 8 の開発環境を構築する

Java の開発では、Eclipse や IntelliJ を利用される方やプロジェクトが多いかと思いますが、Visual Studio Code も使い勝手の良い IDE です。VSCode は他の IDE と比べて軽いというのが大きな利点かと思います。個人的には UI も好みです。今使っている IDE から VSCode に乗り換えてみたい方もいるでしょう。

ただ、Java 11 以降であれば環境構築はスムーズに行えるのですが、Java 8 の場合は少し工夫が必要です。

以降では VSCode で Java 8 を利用する開発環境の構築方法を紹介します。

# 開発環境の構築手順

## 1. Java 8 をインストール

ここではサンプルとして Red Hat の OpenJDK 8 のインストール手順を紹介していますが、他の JDK でも構いません。
既にインストール済みであれば、この章はスキップしてください。

まず https://developers.redhat.com/products/openjdk/download から OpenJDK 8 のインストーラを

元記事を表示

【Java】複数のreplace対象文字列を一度に置換する

## 概要
Javaで文字列の置換を行うときは、`replace`や`replaceAll`を使うと思います。 replace対象が一単語であったり、正規表現でカバーできるなら問題ないのですが、これが複数の単語の場合どうでしょうか。例えば以下のようなケース。

`文字列中の「”りんご”, “みかん”, “ぶどう”」を全て「”apple”, “orange”, “grape”」に置き換える`

例えば、置き換えの対象組みをMapなどで持っておいて、for文でreplaceAllを繰り返し行えば良いと言えば良いのですが、もう少し簡潔に実装するやり方がないかと思い少し調べてみました。

## 対応方法
[こちら](https://stackoverflow.com/questions/6745154/how-to-replace-multiple-words-in-a-single-string-in-java)のStackoverflowの記事にいくつか対応案がのせられています。個人的には、commons-langのライブラリの`StringUtils.replaceEach`を使う方法が

元記事を表示

【Java】アクセサーメソッドを用いて、三角形の面積を取得

#作りたいもの
アクセサーメソッドを用いて、三角形の面積を取得する。
条件:底辺、高さは実行時に自分で任意の値を入力する

#ソースコード(間違ってるかも)
“`TriangleArea.java
import java.util.Scanner;

public class TriangleArea{
public static void main(String[] args) {
@SuppressWarnings(“resource”)
Scanner scan = new Scanner(System.in);
System.out.print(“底辺は? >> ”);
double inputButtom = scan.nextDouble();
System.out.print(“高さは? >> ”);
double inputHeight = scan.nextDouble();

Triangle triangle = new Triangle();
triangle.setButtom(inputButtom);
trian

元記事を表示

Box Java SDKで、Box APIを試してみる

# 概要
BoxのWeb APIを使い、会社の業務システムからBoxのファイルを操作したいと思っています。
システム内で生成したファイルを、Boxにアップロードするイメージです。
調べてみると、[各種プログラム言語のSDKがある](https://ja.developer.box.com/sdks-and-tools/)ようなので、今回はJava SDKを使ってみようと思います。

# 認証をクリアする
APIを使うにはまずは認証をクリアしなければいけません。
BoxのAPIにはいくつかの認証方式が用意されていますが、今回のユースケースでは[JWT認証](https://ja.developer.box.com/guides/authentication/jwt/)が適切だと思います。
他の認証方式については、[公式ドキュメント](https://ja.developer.box.com/guides/authentication/select/)をチェックしてください。

プログラムを書く前に、まずは認証をクリアするためにアプリケーションをBoxに登録します。

## アプリケーショ

元記事を表示

docker-compose 下で Java + Spring Boot + PostgreSQL (Mybatis)を動かす

#内容
Docker docker-compose下でSpringBootを動かすことに挑戦した。
システムインテグレーターの現場でもDockerを使うことが議題に上がるようになっているのは
実際に見聞きするようになっている。

#リソース
https://github.com/noikedan/springmybatis

#前提
Dockerが入っていること
docker-compose が入っていること
imageやコンテナはできる限り整理していることが望ましいかと思われる。
実行確認はマッキントッシュで行なっている。
都度 cd pwd ls などのコマンドを使用している。
参考
https://suin.io/537
https://github.com/IBMDeveloperTokyo/DojoBasicLab/tree/master/Lab1_ShellCommand/Lab1-1_CommandLineBasic

#イントロダクション
Dockerが動いているのを確認し、余計なコンテナがあれば削除する。
リソースをターミナルから取得し、springmybatis内

元記事を表示

【Java】ObjectからCSV形式の文字列を生成する

# 概要

普段システム間のやりとりはjsonを使用しているが、
システムの運用をしているとjson形式のデータだと扱いづらい…

→CSVならエクセルでいろいろできて便利そう!
と思ったのでObjectからCSV形式の文字列を生成する方法をまとめてみました。

# ライブラリ

[jackson-dataformat-csv](https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-csv)を使用します。

“`groovy:build.gradle
implementation ‘com.fasterxml.jackson.dataformat: jackson-dataformat-csv:2.12.3’
“`

# 実装

ここではは以下のObjectを扱います。

“`java
@Data
public class SampleEntity {
private int id;
private String name;
}
“`

早速実

元記事を表示

JDBCからPostgreSQLに接続できない

# エラー
「localhost:5432 への接続が拒絶されました。ホスト名とポート番号が正しいことと、postmaster がTCP/IP接続を受け付けていることを確認してください。」

# 環境
– IntelliJ IDEA community版 (2020.2.4)
– WSL2(Ubuntu 20.04)
– PostgreSQL 12.7
– PostgreSQLでテーブル作成が完了していること(テーブルの中身は任意)

# 原因
– PostgreSQLが起動していない
– 接続するURL(ホスト名、ポート番号)が誤っている

# 対処法
## PostgreSQLが起動しているかWSL2上で確認しましょう。

こうなっていたらPostgreSQLは起動していません。

“`
# /etc/init.d/postgresql status
12/main (port 5432): down
“`

rootユーザでPostgreSQLを起動させましょう。
5432番ポートで起動したことが確認できます。

“`
# /etc/init.d/postgresql st

元記事を表示

【Java】Apache POIで印刷時のシートの拡大縮小の設定が上手くいかなかった原因

# 概要
Apache POIを使用して、エクセル帳票を出力する処理の実装を行っている際に、
印刷時の拡大縮小の設定を処理内で行ったが、上手く設定されない事象が発生した。

# 上手くいかなかった際の処理

“`Java:FailedExample.java
workbook.cloneSheet(0, “TestSheet”);

sheet = workbook.getSheetAt(1);
// 印刷時タイトル設定
sheet.setRepeatingRows(new CellRangeAddress(0, 2, -1, -1));
sheet.setRepeatingColumns(new CellRangeAddress(-1, -1, 0, 9));

// 印刷時の拡大縮小の設定
PrintSetup ps = sheet.getPrintSetup();
ps.setScale((short)40);
“`
上記のように先に印刷時のタイトルの設定を行ってから、拡大縮小の設定を行っていた。
そうすると、

元記事を表示

WebエンジニアがAndroidの改修をやってみた〜画像を保存したいだけなのに〜

普段はLaravel/Vueを使ってるWebエンジニアです。
そんな自分にAndroidの改修依頼が舞い込んできました。

## 依頼タスク
「このAndroidアプリ、非推奨メソッド使ってるんだけどサポートいつ切れるかわからないから新しいのに変えたいんだよねー」
「なる。りょ。」

最初はメソッド置き換えればいいんでしょ?なんて軽く考えていた自分・・・

## 問題となった非推奨メソッド

[getExternalStorageDirectory()](https://developer.android.com/reference/android/os/Environment#getExternalStorageDirectory())
確かに`This method was deprecated in API level 29.`って書いてる。
どうやら外部ストレージへのパスを取得する関数らしい。

【Android】getExternalStorageDirectory()について①

今回改修するアプリは素材画像ダウンロードの際にこのメソッドが使われていた。

## 代替手段1
似たような代わりのメソッドとして

元記事を表示

OTHERカテゴリの最新記事