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

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

DIは美しいデザインパターン

こんにちは。お久しぶりです。

Springで開発中なのですが、なんとも難しい。。。
今日はDIについて書こうかなと思います。

# DI(依存性注入)の定義

> コンピュータプログラムのデザインパターンの一つで、オブジェクトなどの間に生じる依存関係をオブジェクトのコードに直接記述せず、外部からなんらかの形で与えるようにする手法。

これを理解するためには、「依存」という意味と「注入」という意味を理解する必要がある。

# 依存

依存とは一言で言うと「他のクラスを利用しているかどうか」のことである。

例えば下記のコードがあるとする。

“`Car.java
public class Car {

private HondaEngine hondaEngine;

public Car(HondaEngine hondaEngine) {
this.hondaEngine = hondaEngine;
}

public void go() {
hondaEngine.startEngine();
h

元記事を表示

Spigotプラグイン開発 ~環境構築・HelloWorld~

##最初に##

・この記事はMinecraftサーバーのプラグインを作りたいけど何の知識もない! という方向けです。
・もしかしたら間違っていることがあるかもしれませんがご了承ください。

##Intellij IDEAのダウンロード・設定##

JetBrains社のIntelliJ IDEAをダウンロードしていきます。

https://www.jetbrains.com/idea/download/

上のリンクからダウンロードしてください。
プラグインを開発するだけなら **Community** で十分だと思います。

![chrome_76cm29VFtz.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/4af90f99-b96f-78d4-c091-ae5fb0c4fad3.png)

ダウンロードが完了したら開いてNextを押していってください。

![ideaIC-2021.2.3_IY1b3VFyKP.png](https://qiita-image-sto

元記事を表示

Java – How to Convert Comma-Separated String to List?

“`java
List items = Arrays.asList(someString.split(“\\s*,\\s*”));
“`

https://stackoverflow.com/questions/7488643/how-to-convert-comma-separated-string-to-list

元記事を表示

Java – How to Convert an ArrayList to a String?

“`java
import org.apache.commons.lang3.StringUtils;

String str = StringUtils.join(myList);
or
String str = StringUtils.join(myList, “, “) // 2nd param is the separator.

“`

https://stackoverflow.com/questions/599161/best-way-to-convert-an-arraylist-to-a-string

元記事を表示

Java: Spring BootでのWebアプリ開発のYouTube動画をみんなで視聴した

自主的な勉強会として、Spring BootでWebアプリケーションを開発するYouTube動画を、数人の新人開発者と視聴しました。本記事は、その実施内容と私の感想をまとめたものです。

# 勉強会を企画した背景

ふだん、[私はレガシーなWebアプリケーションの開発・保守をしています](https://note.com/flyaway/n/nc1ed9bc5ccfc)。一般に、そのようなアプリケーションを修正する際には、さまざまなところに気をつける必要があります。

たとえば、多くの処理を自前でコーディングする必要があります。また、何か問題にあたったときに、それをGoogle検索しても、解決のための情報はなかなか見つかりません。

そのようなアプリケーションを触ることに慣れてしまうと、それが普通の世界だと勘違いしてしまう可能性があると思いました。

そうではなく、世の中で広く使われているフレームワークを使っていれば、少なくわかりやすいコーディングで実装ができます。落とし穴にもはまりづらく、開発スピードを上げることができます。それは、結果として、プロダクトの競争力を高めることができると

元記事を表示

Arrays.toString()メソッドでハマった話

# はじめに
皆さん、[Arrays.toString()](https://docs.oracle.com/javase/jp/8/docs/api/java/util/Arrays.html#toString-boolean:A-)メソッドご存知ですか?
今回このメソッドを使用しようとして1時間くらいハマってしまったので、記事にします。
※Arrays.toString()メソッドを使うべきでないところで使ってしまった話です

# 今回の経緯

以下のようなListからどうにかして `s1,s2,s3,s4,s5`という文字列を生成したくなりました。

“`test.java
List temp = new ArrayList();
temp.add(“s1”);
temp.add(“s2”);
temp.add(“s3”);
temp.add(“s4”);
temp.add(“s5”);
“`

絶対便利なメソッドあるよな~と思って見つけたのがArrays.toString()メソッド!
試しに出力してみます。

“`test.java
Li

元記事を表示

【SpringBoot2】自作アノテーションの作成と入力チェックについて

# はじめに
この記事はSTSを利用した自作アノテーションの作成方法を記したものです。
以下のバージョンでの動作を確認しています。
– Pleiades All in One Eclipse 2021
– Spring Tool Suite (STS) 4.12.0

今回は「正しいタイムスタンプ形式かどうか」をチェックする自作アノテーションを作成してみたいと思います。

# 注釈(アノテーション)型の作成
1. 「Ctrl + N」もしくは、「ファイル → 新規 → その他」からウィザードを立ち上げます
2. Javaの項目の注釈型を選択し、次へを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1017677/6d065f27-6a76-f7d7-bc4b-6950eced3ae1.png)

3. 名前を記載してください。バリデーション名になるため何を入力チェックするのかが分かりやすいモノであるべきでしょう。
3. `@Rentention`とはアノテーションが影響する範

元記事を表示

[Java]データ型(基本型)について(初心者)

# はじめに
本記事では、Javaの`データ型`について記述します。

# データ型とは
Javaのデータ型は、`基本型`と`参照型`に分けられます。
今回は、`基本型`についてになります。

“`
データ型
|
|-基本型(今回はここ!)
| |
| |-論理型
| |
| |-整数型
| |
| |-浮動小数点型
| |
| |-文字型
|
|-参照型
|
|-クラス型
|
|-インターフェイス型
|
|-配列型
“`

## 論理型
boolean…真偽型(true、またはfalse)
論理演算の結果として、trueかfalseで返すということになります。

また、trueかfalseなので、
サイズとしては、`1bit`になります。

“`Bool.java
class Bool {
public static void main(String[] args) {
int var_a = 1;
int var_b = 10;
boolean var_bool;

元記事を表示

Selenium Gridの環境を構築する(docker-compose利用)

## クライアントも WebDriver もブラウザ本体もローカルで稼働する場合

macOS を利用している場合は、ChromeDriver などのドライバーを格納したディレクトリで以下のコマンドを実行して、実行可能にしてから使用する。

“`bash
sudo xattr -d -r com.apple.quarantine chromedriver
“`

Safari は WebDriver は不要で、Safari の設定で「開発」から「リモートオートメーションを許可」とするだけでよい。

Chrome や Firefox(geckodriver) を利用する場合は、WebDriver へのパスを指定する必要がある。

“`java
System.setProperty(“webdriver.chrome.driver”, “/path/to/chromedriver”);
ChromeOptions options = new ChromeOptions();
WebDriver driver = new ChromeDriver(options);
“`

## ク

元記事を表示

Spring Boot + WebSocketのチャットアプリのチュートリアルをやってみたので解説してみる

## はじめに
普段はフロントエンドな私ですが、ちょっとバックエンドも触りたくなり、JavaのWebアプリケーション向けフレームワークであるSpring Bootに入門しました。
勉強進める中で、ちょうど良さそうなチュートリアル動画があったので成果物のアプリの解説をしてみたいと思います。

チュートリアルの動画:[Spring Boot WebSocket: Chat Example
](https://www.youtube.com/watch?v=-ao3pX-UhQc&t=3374s&ab_channel=JavaMaster)
コード:[github:spring-websocket-chat
](https://github.com/caligula95/spring-websocket-chat)

## 依存関係
spring-boot-starter-websocketが必要です。

“`xml

org.springframework.boot
spring-boot-st

元記事を表示

JUnit5で環境変数が指定されていない場合にテストを実行しないようにする

“EnabledIfEnvironmentVariable“アノテーションをクラスまたはメソッドに付与する。複数の環境変数が必要な場合は“EnabledIfEnvironmentVariables“を使用する。

“`java
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariables;

@EnabledIfEnvironmentVariables({
@EnabledIfEnvironmentVariable(named = “HOGE”, matches = “.*”),
@EnabledIfEnvironmentVariable(named = “FUGA”, matches = “.*”)
})
public class SampleTests {
“`

Visual Studio Codeの場合は“settings.json“に

元記事を表示

[Kotlin] when式の表現力

Javaから派生した言語であるKotlinには、Javaのswitch 〜 case文の後継としてwhen式 (when expression) が用意されています。switch 〜 caseから重要な点が変更されていて単純比較はできないものの、表現力が増して読みやすく書ける場面が増えたといってよいと思います。Rubyのcase 〜 when式などよりも使える表現が多くなっています。

Kotlinではwhenは文でなく式として使えます。つまり値を返させることができます。もちろん、あえて式として使わず文として自由に使うこともできます。

本記事の対象は Kotlin v1.5 以上のバージョンです。本記事のコードは Kotlin v1.5.31 で検証しています。

## 引数ありwhen式

以下の引数ありwhen式の記述例は、`->` の左辺に `value` に対する条件を、右辺に条件に合致した場合の値(式、もしくは処理)を書いています。

“`kotlin
fun printKindOf(value: Number) {
println(
when (

元記事を表示

HerokuにSpring Bootアプリをデプロイするときにハマったことのまとめ

Herokuに初めてSpring Bootアプリをデプロイしたときにハマったことと、どうしたら解決したかをまとめておきます。一般論については[公式サイト](https://devcenter.heroku.com/ja/articles/deploying-spring-boot-apps-to-heroku)や多くの優れた記事が既にあるので、この記事では私がハマったときの状況や表示されたエラーメッセージ等と、それをどう解決したかを一般化せずそのまま書いていきます。同じ状況にある人の参考になれば幸いです。
#筆者の環境
openjdk version “11.0.2” 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)
javac 11.0.2
Apache Maven 3.8.2
#Exception in thread “main” java.lang.UnsupportedClassVersio

元記事を表示

brainfuckインタプリタをJavaで実装

間違いがあったら指摘をお願いいたします。
GUI部分に関してはやっつけなので気にしないで…

“`Java
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

static int[] array = new int[30000];
static int ptr;
static ArrayList loopPtr = new ArrayList<>();

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

JLabel outLabel = new JLabel();
JFrame frame = new JFrame(“out”);
frame.setSize(new Dimension(500, 500));
fram

元記事を表示

(Java)標準出力から二次元配列で受け取る方法

#(Java)標準出力から二次元配列で受け取る方法

####inputがint型の場合

例:
2(二次元配列の行数を指定)
600 200 200 400
900 800 400 500

“`java
//スキャナークラスのロード
Scanner scan = new Scanner(System.in);
//二次元配列の行数を取得
int count = scan.nextInt();
//二次元配列の行数を作成(配列の要素数は例に合わせて記載)
int[][] element = new int[count][4];

// トークン取得、二次元配列へ格納
for (int i = 0; i < count; i++) { element[i] = new int[4]; for (int j = 0; j < 4; j++) { element[i][j] = scan.nextInt(); } } ``` ####inputがString型の場合 例: XXOXO OXOXX OOOOO OXOX. XOXXO ```java //スキャナークラスのロ

元記事を表示

【初心者向け】SpringBootにおける単体テストの基本事項

# 【初心者向け】SpringBootにおける単体テストの基本事項
最近になってやっと単体テストの基本的な考え方・書き方がわかってきた(当社比)のでいったん自分なりにまとめようと思います。
以下の項目について簡単にまとめます。これらの項目を知っていれば、もちろん状況によって追加で調べることは必要ですが、特殊なケースを除いて単体テストの作成にはあまり困らないと思います。
以下のリンクにコードを残しておきます。
https://github.com/Shukupon/TestTemplate

– クラスの単位
– モック化
– コントローラークラスのテスト
– リポジトリクラスのテスト

## 前提条件
– Java11
– SpringBoot 2.5.6
– Junit5
– H2
– MyBatis
– REST API

## クラスの単位
単体テストを作成する単位は基本的に1つのクラスに対して1つのテストクラスです。
基本的にというのは、メソッド内の処理が適用されるプロファイルの内容によって分岐するため、プロファイルの数だけテストクラスを作った方が便利な場合などがあり得るため

元記事を表示

Couchbase Server Java SDK解説:分散トランザクション〜トランザクションライフサイクル

## はじめに

Couchbase Serverの分散トランザクションにおけるトランザクションライフサイクルは、基本的にRDB/SQLと同様のものとして理解することができますが、アプリケーション開発において利用するにあたって、独自の考慮点もあります。

– Couchbase Serverにおけるトランザクションは、クラスターへの処理リクエスト実行レベルで選択することのできるオプションです。つまり、アプリケーションには、トランザクションアクターと非トランザクションアクターが存在します。

– また、このことを別の視点から言い換えると、Couchbase Serverにおけるトランザクションは、SDK/クライアントが主体となって実現される機能であるといえます(中央集権的なプロセスは存在せず、そこから起因する性能影響もありません)。

## トランザクションライフサイクル

### トランザクションの初期化

`Transactions`オブジェクトの構築により、バックグラウンドプロセスが自動的に実行され、スレッドプールを含むいくつかのリソースが使用されます。
そのため、アプリケーション

元記事を表示

あったらいいなと思っていたスキルマップアプリをVueとGoで作ってみた

# 作ってみたもの
作ったWebアプリは [Graphyee](https://graphyee.com) と名付けました。
技術と技術は関連しているものなので、「スキルマップをグラフ構造で表現できたら分かりやすくて面白いかな」と思いついたのが経緯です。
まだβ版としていますが、一旦使える感じになったのでノリと勢いで公開してみました。

こんな感じで [サンプル](https://graphyee.com/sample/1) は誰でも使えます。

:::note warn
サンプルは実績を入力しても保存できないのでご注意下さい。
:::

![sample.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2201222/57ea423b-20f5-3dcf-8370-b8c19134a8d5.gif)

ユーザ認証すると、より細かい [スキルマップ](https://graphyee.com/graph/1) が使えます。

:::note info
ユーザ認証していただければ、入力した実績が

元記事を表示

Couchbase Server Java SDK解説:分散トランザクション〜ログとトレース

## はじめに

Couchbase Serverの分散トランザクションライブラリーにおける、ログとトレースについて、解説します。

## ログ

トラブルシューティングを支援するために、各トランザクションはログエントリのリストを維持します。そして、次のようにエラー発生時にログに記録できます。

同期APIの場合:

“`JAVA
} catch (TransactionCommitAmbiguous e) {
// The application will of course want to use its own logging rather
// than System.err
System.err.println(“Transaction possibly committed”);

for (LogDefer err : e.result().log().logs()) {
System.err.println(err.toString());
}
} catch (TransactionFailed e) {

元記事を表示

Couchbase Server Java SDK解説:分散トランザクション 〜N1QLクエリ

## N1QLクエリ
Couchbase Server 7.0以降、N1QLクエリはトランザクションラムダ内で使用できるようになりました。N1QLクエリとKey-Value操作とを同じラムダ内で組み合わせて利用することができます。

## トランザクションの開始
Couchbase Serverでは、SDK利用に限らずに見た場合、トランザクションを開始するには、トランザクションライブラリーを使用する方法と、Queryサービスへのリクエストとして、`BEGIN TRANSACTION`を使用する方法の2つがあります。後者の方法は、CLI、REST API、またはWebコンソールUIのクエリワークベンチを使用する場合を想定されています。アプリケーションでは、トランザクションライブラリーを使用します。トランザクションライブラリーは、下記の利点を持ちます。

– エラーと再試行を自動的に処理します。
– これにより、Key-Value操作とN1QLクエリを自由に組み合わせることができます。
– 自動的に`BEGIN TRANSACTION`、`END TRANSACTION`、`COMMIT`

元記事を表示

OTHERカテゴリの最新記事