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

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

コンストラクタの代わりに staticファクトリメソッドを検討する

# これは何?
Effective Java 第3版を読んで自分なりにかみ砕いた内容を記事に落としていきます。
良いコードを書くための選択肢の一つになれば最高なので、頑張ります。
※読み進める中で知識のアップデート等あれば都度更新いたします。

# 概要
クラスのインスタンスを得るために public のコンストラクタを作成するのではなく、
**public の static ファクトリメソッドを作成するというもの**
・例 (Booleanクラス)
boolean基本データ値をBooleanオブジェクト参照に変換している

~~~java
public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}
~~~

# メリット
## ①コンストラクタと異なり名前を持つこと
クラスは特定のシグニチャ(※1)を持つコンストラクタを1つしか持てません。
→型の順序を変えて対応は可能ですが、コンストラクタを利用する際に間違ったコンストラクタを呼

元記事を表示

Fortniteのビクロイ数を教えてくれるLINE BOT作ってみた

# はじめに
趣味でなんでも良いから動くものを作って技術に触れようということで、最近一番プレイしている Fortnite というゲームに関する LINE BOT を作成しましたので紹介します。
# Fortnite とは

Fortnite とは Epic Games が運営しているオンラインゲームです。クロスプラットホーム(PC・PlayStation・Switch どのゲーム機からでも遊べる)であることが特徴で、主に 100 人が同時に参加し残りの 1 チームになるまで戦うバトルロイヤルがメインのゲームとなります。

世界的コンテンツとよくコラボしており、直近だとスパイダーマンとのコラボが記憶に新しいです。
![fortnite.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/258405/01d22c25-1aaf-4783-83c4-cae1e708b242.jpeg)

このゲームの魅力を語り出すと止まらなくなるのでこの辺にして公式 HP のリンクを共有して次に進みます。

https://w

元記事を表示

[Java] 競プロ最序盤で個人的によく使うリファレンスまとめ (更新中)

初投稿です。
競プロを初めて2週間程度ですが、序盤の問題でよく使うリファレンスが増えてきたので 覚書として以下にまとめました。今後も役に立った知識は随時追加していく予定です。
浅学のため、「ここがおかしい」という箇所がありましたらお気軽に指摘して下さると非常に助かります。

:::note info
本項での「競プロ最序盤」は
・[AtCoder Beginner Contest](https://kenkoooo.com/atcoder/#/table/)でのA, B問題
・[Paiza スキルチェック](https://paiza.jp/challenges)でのB~E問題
を指します。
:::

【文字列編】
————
以下、文字列 str1 をHello,Worldとします。
“`java
String str1 = “Hello,World”;
“`

### ・文字列をchar型配列に変換
char[] 配列名 = str1.**toCharArray();**
**超頻出**

“`java
char[] chars =

元記事を表示

Keycloakによる認証基盤の立ち上げ(1) Wildfly版

# この記事の概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50759/0724f129-0e33-42a5-f89b-d9dbe410a10e.png)

– 既存の認証基盤を持たない組織の前提
– 認証基盤としてKeycloak導入、組織で保持するアプリのSSO用に活用する
– アプリごとにどんなRealmを切るかは試行錯誤

# Keycloakの紹介

– 基本的な機能は、NRIさんの紹介記事があるので参考に ⇒ [Keycloakとは]
– 基盤は Javaサーブレット ⇒ 稼働先OSやアプリケーションサーバやについて選択の幅が広く持てる
– ライセンスは [Apache-2.0](https://github.com/keycloak/keycloak/blob/main/LICENSE.txt)

# 本記事執筆時の諸事情

試使用を開始し、現在も試使用中なのは `v16.1.1` 。
折り悪く、ちょうどKeycloakは `v16` から `v17` への移

元記事を表示

Spring bootのアノテーションについて(@RequestParam)

現在学習しているSpring bootにて基礎的なアノテーションの@RequestParamについて再度学習したので、アウトプットも兼ねてまとめます。

## ①RequestParam

ブラウザからのリクエストの値(パラメータ)を取得することができるアノテーション。
### Controllerクラス
“`java

public String example(@RequestParam(“message”)String message Model model ) {

Model.attribute(“message”, message);

return “example”;

}

“`
### View(HTML)
“`html

“`
http://localhost:8080/~?message=example
上記のようにリクエストの際に

>message=example

とすることで、
①RequestParamの”message”にexampleという文字列が代入される。

②String m

元記事を表示

【Java】modelMapperでList⇔List, String⇔LocalDate, String⇔LocalDateTimeを変換する。

# 参考

https://www.baeldung.com/java-modelmapper-lists

# List\ → List\ のマッピング
“`java
List entities = // DBからHogeEntityリスト取得
List dtos = modelMapper.map(entities , new TypeToken>() {}.getType());
“`

# String ⇔ LocalDate のマッピング
“`java
// String to LocalDate
mapper.addConverter(
new AbstractConverter() {
@Override
protected LocalDate convert(String source) {
if (source == null) {

Scalaの勉強はじめました 4 〜オブジェクトとクラス②〜

## はじめに
N予備校の「Scala基礎」「Scala応用」コースを受講しています。
「オブジェクトとクラス」でざっくりまとめたことを少し後悔してます。

## トレイトとミックスイン
トレイト(振る舞い)を継承することをミックスインという

:::note
複数のトレイトを1つのクラスやトレイトにミックスインできる。
直接インスタンス化はできない。
クラスパラメータ(コンストラクタ引数)を取ることができない。
:::

`trait`で定義されるメソッドは、必ずしも実装する必要がない

“`scala
class PaperCup extends Paper with Fillable with Disposable
“`

クラスを同じやり方で複数継承はできないので注意。

### super

“`scala
class Class2 extends TraitB with TraitC {
override def greet(): Unit = super[TraitB].greet()
}
“`

継承やミックスインで利用している型を指定して自身のインスタンス

Kotlinでrest-assuredを使う

REST APIのテストコードを効率良く記述するためのライブラリである[rest-assured](https://rest-assured.io/)をKotlinから利用してみた。

### ライブラリを依存関係に設定する

[Kotlin用のExtensionライブラリ](https://kotlinlang.org/docs/extensions.html#extension-functions)が提供されているため、これを依存関係に設定するだけでrest-assured本体は推移的に解決される。

build.gradle.kts

“`kotlin
dependencies {
testImplementation(“io.rest-assured:kotlin-extensions:4.5.1”)
}
“`

### テストコードを実装する

先述のExtensionライブラリは、trainling lambdaやinfix notation、scope functionを活用してすっきりとした記述を可能にしている。条件・アサーション等をブロックで区切ることがで

Singletonパターン

# Singleton – インスタンスはひとつだけ
参考書(結城浩([@hyuki](https://twitter.com/hyuki “@hyuki”))氏の[増補改訂版Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030/ref=sr_1_1?ie=UTF8&qid=1448935369&sr=8-1&keywords=java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3

【 Java_インクリメント演算子とデクリメント演算子 】

現在独学でJavaを学習中です。
この投稿はその備忘録になります。

## インクリメント演算子とデクリメント演算子
■インクリメント演算子( ++ )
 対象の値をひとつ増やす
■デクリメント演算子( — )
 対象の値をひとつ減らす

##### それぞれの使用例
“`java
■インクリメント演算子■
int num = 5;
num++;

System.out.println(num); //6

■デクリメント演算子■
int num = 5;
num–;

System.out.println(num); //4
“`

### 前置と後置の違い
“`java
■前置き■
++num
–num
■後置き■
num++
num–
“`
##### 結果が同じになる使用例
“`java
■後置き■
int x = 5;

x++;
System.out.pritnln(x); //6
“`
“`java
■前置き■
int x = 5;

++x;
System.out.println(x); //6
“`
##### 結果が異なる

Trixで画像アップロードを利用する

# はじめに

WYSIWYG エディタの Trix を使ってみました。画像アップロード機能も利用できるようにしたので、その手順を載せます。
Spring Boot で試しましたが、他の環境でも同様にできると思います。

[Trix: A rich text editor for everyday writing](https://trix-editor.org/)
[GitHub](https://github.com/basecamp/trix)

# 環境

* Java
* Spring Boot
* Thymeleaf
* H2 Database
* lombok

# 対象者

* 基本的な Java のコーディングができる方
* Spring で Web アプリ開発をしたことがある方

# 前提

コード量が多くなるので、記事では Trix により近い部分にフォーカスして扱います。割愛したソースは下記 GitHub で確認していただければと思います。
アプリのひな形は [Spring initializr](https://start.spring.io/) で作りました

Scalaの勉強はじめました 3 〜オブジェクトとクラス①〜

## はじめに
N予備校の「Scala基礎」コースを受講しています。
今回は、オブジェクトとクラスについてです。

## クラス

:::note
複数のオブジェクトを作るための雛形のようなもの
:::

“`scala
class Cat(name: String) {
def greet(): Unit = println(s”吾輩は${name}である”)
}
val cat = new Cat(“ねこ”)
cat.greet()
“`
`name`がフィールド、`greet`がメソッド。

:::note
クラスの中でしか使わないメソッドやクラスの中だけでしかアクセスさせたくないフィールドには、`private`というアクセス修飾子をつける。
:::

### 抽象クラス
継承を使うことを前提に作られたクラスのこと。
インスタンス化はできない。`abstract`をつける。

“`scala
abstract class Creature(var name: String) {
def isAlive(): Boolean = true
}

class Huma

Git HookでSpotlessとktlintを使った自動コードチェック

チームで開発する時に一律でフォーマット揃ってたり、
既存のコードも一律に綺麗にしたりを今後維持できるようにできたらいいなと思ったので
とりあえずやってみました。

## Git Hookとは

Gitでコマンドを実行する際に、前後でスクリプトを実行できるGitの機能。

今回使う`pre-commit`の場合、commitを行うとその前にスクリプトが実行され、
問題があればcommitを中止し、なければcommitを通すといったことが出来ます。

例としては
* commit時にテストを流す
* commit時にlinterでチェック、あるいはフォーマッターをかける
* 特定のブランチへのcommitを禁止(masterやdevelopなど)
* …etc

## Spotlessとは

https://github.com/diffplug/spotless

Javaのコードチェック、フォーマットが出来るLinterです。
指定したフォーマットに従ってJavaのコードをいい感じにフォーマットしてくれます。

## Ktlintとは

https://github.com/

コンピュータとオセロ対戦49 ~AI実装と性能評価~

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

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

# 今回の目標
前回作成したネットワークを使用して対戦AIを作る。
また、[34 ~性能評価~](https://qiita.com/tt_and_tk/items/13be9077d3b136c20375)のように、その強さを客観的に評価する。
# 使用バージョン
* Java 17.0.1
* MyNet 1.2.4
# ここから本編
## 対戦AIを作る
まずは前回作成したネットワークを使えるようにしていきます。
なお、ここではそのネットワークを「oseroAI.net」という名前に変更しています。
### クラス構成
四つの引数を受け取り、倍精度実数を返す関数を格納するFourFunctionクラスも使用しています。
OseroBaseとOseroクラスについては、前回から変更していません。

“`
OseroBase // オセロの基本機能

オブジェクト指向をガンプラに例えてみた

# **初めに**

IT未経験者でjavaを学習していて演算子やら配列やら繰り返し文…。
最初の内はプログラムの動くを知る意味でも基礎を身に着ける意味でも
ちょっと考えて動かせる様なとこから始まると思いますが慣れてきたとこで
いきなり**オブジェクト指向**…何か概念的なやつが出てくると思います。

正直言って頭に入ってこない人も居ると思いますし自分もそうです。
なので自分なりに分かりやすくまとめてみました。
今回は
 1.そもそもオブジェクトとは?
 2.説明書(クラス)を読もう
 3.組み立てよう(インスタンス化)
この3つに絞りたいと思います。

## 1そもそもオブジェクトとは?
ざっくり言いますとモノ、言うなればガンプラですはい。
こいつを今から組み立てる訳ですね、では箱を開けていざ組み立て!

の前に先ずはやることがありますよね?
そうです説明書を見ますね、これが無いとガンプラは組めません。
なので次にやることは…

## 2説明書(クラス)を読もう
実際に説明書を見ると
 -脚部
 -胴体
 -腕部
 -バックパック
 -ビームライフル
 -シールド
 -頭部
の作

java初心者の日記(3)

最近すごい寒いので外に出たくないですね。

今日はFizzBuzz問題を解いてみました。javaのオブジェクト指向をどうたらこうたらって言うよりもただのアルゴリズムって感じですね。

#### for文
“` java
for (int i = 1; i<100; i++){ if(i%15==0){ System.out.print("FizzBuzz "); }else if(i%5==0){ System.out.print("Buzz "); }else if(i%3==0){ System.out.print("Fizz "); }else{ System.out.print(i+" "); } } ``` #### while文 ```java int i = 1; while(i<=100){ if(i%15==0){

【Kotlin】定数で定義する

Kotlinの定数定義をする場合
## 結論
CompanionObjectを利用し、constを付けて定義する
“`定義の方法.kt
class Hoge {
companion object {
const val NAME = “hoge”
}
}
“`

## companion objectとは
クラス内では、objectキーワードの前にcompanion修飾子を付与することでクラスに属する**Singletonが作成**できる。これをcompanion objectと呼ぶ。

companion objectは**1クラス内に1つだけ宣言可能**。また、オブジェクト名は省略可能。

Javaの上位互換性を信じすぎてはいけないとか

# クイズとか
いつものとおりクイズからスタートです。
以下のプログラムを**実行**して、得られる**結果**を答えてください。
“`java
import java.util.stream.IntStream;
public class Peeker {

public static void main(String[] args) {
long i= IntStream
.rangeClosed(1,3)
.map(x->x*2)
.peek(System.out::print)
.count();
System.out.println(i);
}
}
“`
ちなみにあまり見たことないかも知れませんので書いておきますと、peekは要素を渡すだけ、好きにしてね!という動きをします。
たぶんデバッグ用途以外で使うことはないです。てかJava APIリファレンスにもそう書かれてますし。
>This method exists mainly to support debugging,

# 答えとか
答えは **「Javaのバージョンによる

blastengineのJava SDKを使ってメール送信を行う

[blastengine(ブラストエンジン)](https://blastengine.jp/)はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先に届くようになります。

現在、Java向けに、blastengine SDKを開発しています。この記事では、その使い方を解説します。まずはテキストメールの即時送信についてです。

[blastengineMania/blastengine-java: Java SDK for blastengine](https://github.com/blastengineMania/blastengine-java)

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。

![getting-started-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b

Java: JUnit 例外が発生することを確認するテストの書き方の変遷

# はじめに

JUnitでは、バージョンによってテストの書き方が異なります。

この記事では、例外が発生することを確認するテストの書き方を比較します。

# JUnit 3

[failメソッド](http://junit.sourceforge.net/junit3.8.1/javadoc/junit/framework/Assert.html#fail())が呼ばれるとテストに失敗するという仕様を利用します。

下記のサンプルコードの場合、getメソッド内でIndexOutOfBoundsExceptionが発生した場合は、catch句に入り、[failメソッド](http://junit.sourceforge.net/junit3.8.1/javadoc/junit/framework/Assert.html#fail())は呼ばれません。このため、テストに成功するという仕組みになっています。

JUnit 4/5でもこの書き方は可能ですが、後述の書き方のほうが読みやすいでしょう。

“`java
public void testOutOfBounds() {
t