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

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

【Java/Lombok】@SuperBuilderでバリデーションする

##はじめに

オブジェクト指向プログラミング初心者が考える最適なBuilderパターンを解説します。誤った考え方や改善案等ありましたらコメントいただければと思います。

##Lombokの@SuperBuilderではダメ?
Lombokには予め、スーパークラスからのフィールドにも対応したビルダーを自動で生成する@SuperBuilderアノテーションが用意されています。

“`java:SomeClass
import lombok.experimental.SuperBuilder;

@SuperBuilder
class SomeClass {
// some code…
}
“`

このように、アノテーション1つ頭につけるだけで、自動的に親クラスのブロパティを含むビルダーを生成してくれます。

@SuperBuilderについて詳しくはこちら。

https://projectlombok.org/features/experimental/SuperBuilder

しかし、このアノテーションは**バリデーションに対応していません**。加えて**

元記事を表示

メソッドのJavadocには何を書くべきなのか

Javaで開発しているチームで、Javadocに何を書くべきかわからない、という課題がありました。[エンジニアのためのJavadoc再入門講座](https://www.shoeisha.co.jp/book/detail/9784798119489)の3章を読んで自分なりにまとめた内容となります。

## メソッドのJavadocの構成
メソッドのJavadocの構成の基本形は以下となります。

“` java
/**
* 主説明
* @param 引数の説明
* @return 返却値の説明
* @throws 例外の説明
*/
“`

## 引数の説明に書くべきこと
まず、引数の説明に書くべきことについて。主説明については後回しにします。
引数を取るメソッドのJavadocにはすべての引数についての説明を記載すべきです。引数の説明には`@param`タグを使用します。
引数の定義域が大事なポイントになります。引数に取りうる値の範囲は明確になっているかを最初に確認しましょう。[^1]

### 特別な値を受け取ったときの挙動
nullや0、負数、空文字などの特別な値

元記事を表示

Javaで書くフィボナッチ数列

Javaで書くフィボナッチ数列

Javaを使ってフィボナッチ数列を生成するプログラムを作成しました。

“`java:コード

public class Fibonacci {
public static void main(String[] args)
{
int f0,f1,f2;

f0 = 0;
f1 = 1;

System.out.println(f0);

while(f1 < 100000) { System.out.println(f1); f2 = f0 + f1; f0 = f1; f1 = f2; } } } ``` ```java:結果 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 ```

元記事を表示

【Java発展学習16日目】マルチスレッドプログラミング

# マルチスレッドプログラミング(並列処理; multi-thread programming)
[参考: 発展学習3日目(ラムダ式)](https://qiita.com/b150005/items/6084efe79c1a425f7a30#%E3%83%A9%E3%83%A0%E3%83%80%E5%BC%8Flambda-expression)
全ての処理は特定の**スレッド**上で実行され、`main()`メソッドは**mainスレッド**上で動作する。

ここで、サブスレッド(=スレッドクラス)は「`Thread`クラスのサブクラス」または「`Runnable`インタフェースの実装クラス」で定義され、
`Runnable`インタフェースは**関数インタフェース**であるため、**ラムダ**式を用いた記述が可能。

また、サブスレッドはスレッドクラスで再定義された`run()`メソッドの**実行完了時に自動消滅**され、JVMは全**ユーザスレッド**の実行終了を待機する。
スレッドの実行終了を待機しない場合は、`Thread#setDaemon()`メソッドを用いて**デーモ

元記事を表示

文字の切り取り方

Javaで標準入力で入力した文字をsubstringとcharAtでとる方法です。

substringで1文字ずつとる場合

“`Java
import java.util.Scanner;

public class flora2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(“floraの文字を入力してください”);
String ans = sc.nextLine();
int nagasa = ans.length();
for(int i=0;i

元記事を表示

【Java発展学習14-15日目】設計原則とGoFデザインパターン、モジュールシステム

# 6つの設計原則

| 分類 | 設計原則 | 内容 |
|:–|:–|:–|
| コード記述 | DRY(Don’t Repeat Yourself) | 繰り返さない |
| | PIE(Program Intently and Expressively) | 意味・意図の明確化 |
| クラス設計 | SRP(Single Responsibility Principle) | 単一責任原則 |
| | OCP(Open-Closed Principle) | 開放閉鎖原則 |
| クラス間連携 | SDP(Stable Dependencies Principle) | 安定依存原則 |
| | ADP(Acyclic Dependencies Principle) | 非循環依存原則 |

## PIE
`PIE`では、「コメント文を取り除いても可読性の高いコード」を目指す。
具体的には、以下の3つの手法をとる。

> 1. 変数名で**役割・目的**を表す
> 2. **マジックナンバー**をfinal定数で命名
> 3. 制御構造の深い処理への命名

元記事を表示

Couchbase Java SDK解説:分散トランザクション API解説および包括的な利用例

## はじめに

Couchbase SDKを使った、Javaプログラミングにおけるトランザクションの扱いを具体的なAPIコールに即して解説します。

本記事の関連情報として以下をご参照ください。

[Couchbase Java SDK解説:分散トランザクションの内部メカニズム](https://qiita.com/yoshiyuki_kono/items/2d428b16b224b8c01239)

[Couchbase Java SDK解説:分散トランザクション〜エラー処理を理解する](https://qiita.com/yoshiyuki_kono/items/d7eb2b9553d858c7cb93)

[Couchbase Java SDK解説:分散トランザクションプログラミング入門](https://qiita.com/yoshiyuki_kono/items/4efb2f1f5a03051e28c5)

## ドキュメントへのK/Vアクセス

#### ドキュメントの取得
ドキュメントを取得するには、`get`と`getOptional`の2つのメソッドがあります。

元記事を表示

“指定されたコンパイラー準拠は x.y ですが、JRE zz が使用されています”の解消

Eclipse でプロジェクトを作ると
“指定されたコンパイラー準拠は 1.5 ですが、JRE 11 が使用されています“
みたいなWarningが出ることがある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/414729/2adac0fe-e55c-4f48-3bb3-5170e50c6640.png)
これはまんま、このプロジェクトでコンパイル/ビルド用に指定した“javac“のバージョンが“1.5“になっているが、実際に環境にインストールされているJavaのバージョンは“JRE 11“ですよと言っている。
実際問題、Java 1.5 でコンパイルしたコードは Java 11 でも Deprecated になった API さえ利用していなければほとんどの場合動作すると思う。けれど Warning が出たままだと気持ち悪いし、古い API を間違って使ってしまうのも嫌なので、実行環境の JRE のバージョンとビルド用の javac のバージョンを合わせる方法について以

元記事を表示

ArrayListの型に独自のクラスを指定するメリットって何なのさ!

備忘録的な感じです。
Javaの配列って型が固定だったりする。

“`java
int[] num;
//配列の宣言
“`
こういう書き方もできる。

“`java
int num[];
//配列の宣言
“`
型が混在した配列を扱う場合には、通常の配列だと単一の型に指定するため、そのまま通常の配列に代入して扱うことはできない。
例えばSQLでレコード1行分を取得する際、int型の`id`とString型の`name`が混在していたりする。
そうした場合に独自の配列を作る必要がある。
その場合、`ArrayList`を`List`型で宣言する。
`<>`内の型に独自のクラスを指定し、クラス内にSQLのカラムに合わせたフィールドを定義する。
そうすると下記の通り。

“`java
//Introduceクラス(実行ファイル)
package sample;

import java.util.ArrayList; //ArrayListのimport
import java.util.List; //Listのimport

public class Introduce {
p

元記事を表示

Running CICS-Java application – (5) Using JCICSX

This article is translated from the Japanese article below.
https://qiita.com/tomotagwork/items/cac290f6435453c19b7b
([google translate](https://translate.google.com/) was used.)

#Introduction
CICS Transaction Server provides a class library called JCICS for using CICS functions from Java. This is the Java version of EXEC CICS API, which allows you to call other CICS programs with LINK and access CICS management resources such as TSQ/TDQ. By using this, you can write a CICS application in Java.

元記事を表示

Running CICS-Java application – (4) Build management with Gradle

This article is translated from the Japanese article below.
https://qiita.com/tomotagwork/items/9bdef46069e1591103ba
([google translate](https://translate.google.com/) was used.)

#Introduction

CICS TS for z/OS supports running Liberty, so you can run Java EE applications on CICS.
With support for Spring Boot from CICS TS V5.3, Spring Boot applications can now run on CICS (with Liberty on CICS). Running on CICS means that you can use JCICS, which uses CICS functions, so web apps that call exist

元記事を表示

Running CICS-Java application – (3) Build management with Gradle

This article is translated from the Japanese article below.
https://qiita.com/tomotagwork/items/6fae5bd3440635ad26af
([google translate](https://translate.google.com/) was used.)

#Introduction
CICS TS V5.6 also supports Gradle as a build management tool for CICS-Java applications, along with Maven. Here, we will try build management of CICS-Java application using Gradle.

## Related articles
[Running CICS-Java application – (1) Simple application](https://qiita.com/tomotagwork/items/b3c48da3892

元記事を表示

Running CICS-Java application – (2) Build management with Maven

This article is translated from the Japanese article below.
https://qiita.com/tomotagwork/items/a487484835d4e8dd2d6f
([google translate](https://translate.google.com/) was used.)

#Introduction
It’s been a long time since I’ve been able to develop CICS applications in Java, and a lot of enhancement aroud CICS-Java functions is provided. Here, I would like to try out the new Maven support for CICS TS V5.6 (June 2020 GA).

In the example shown before, we confirmed the flow of manually building and

元記事を表示

Running CICS-Java application – (1) Simple application

This article is translated from the Japanese article below.
https://qiita.com/tomotagwork/items/aac10ad84fe83d88bb5f
([google translate](https://translate.google.com/) was used.)

# Introduction
COBOL, PL/I, and Asembler are often used as application development languages for CICS Transaction Server for z/OS, but Java has also been supported for a long time. This means that you can write CICS applications in Java. A Java class library (JCICS) equivalent to the EXEC CICS command is provided, so y

元記事を表示

Spring bootでLINE Botを作る

## 概要
LINEが配布しているサンプルコードの[line-bot-sdk-java](https://github.com/line/line-bot-sdk-java)を使って、Spring bootでLINE Botを作る手順。このサンプルコードは、LINE Botを作る上で必要なコードが一式揃っているので、これを元に拡張していくと効率がよいと思われる。

## LINE Channelの作成
以下を参考にChannelを作成する。
[ボット用のチャネルを作成](https://developers.line.biz/ja/docs/messaging-api/getting-started/)

## herokuでアプリを作成
herokuでアプリを作成する。
https://signup.heroku.com/

### herokuに環境変数の登録
[LINE Developersコンソール](https://developers.line.biz/console/)で、Messaging APIチャネルのチャネルシークレットとチャネルアクセストークンを確認し、hero

元記事を表示

ApachePOIを色々連携する話

こんにちは
======
先日ApachePOIを導入→出力するという内容を投稿したものですが
あれでは全然実用性がないジャナイカ
もっといろいろ連携したいジャナイカ
HTMLやJspの内容を出力したいジャナイカ

ということで
本日の議題はこちら

データベースから引っ張ってきた値を
jspでtableタグに放り込んで表を作り、
それをさらに出力できるように
あわよくばスタイル設定までしちゃおう!!

のコーナー

はい
急になんか複雑な感じに見えてきます
でも大丈夫です
プログラミングを初めて4か月目の僕でもできました
つまりはサルでもできるはおろか
犬でもできます
ワン。

ということで早速前提条件を揃えていきましょう
この記事を見ている方からしたら
データベースから値をとってきて、jspにsessionで送り
jspでEL式で表を作るなんてことは朝飯前はおろか
朝起きてうがいするより前にできることでしょう

この時のポイントとして、送りたい表を作っている部分を
formタグで囲いましょう
今回はボタンを押すとXlsx形式でDLできるようにしたいので

“`jsp:そういうやつ

元記事を表示

Couchbase Java SDK解説:分散トランザクションの内部メカニズム

## はじめに

本稿は、分散トランザクションの内部メカニズムについて概観を与えることを目的としています。

本記事の関連情報として以下をご参照ください。

[Couchbase Java SDK解説:分散トランザクション〜エラー処理を理解する](https://qiita.com/yoshiyuki_kono/items/d7eb2b9553d858c7cb93)

[Couchbase Java SDK解説:分散トランザクションプログラミング入門](https://qiita.com/yoshiyuki_kono/items/4efb2f1f5a03051e28c5)

### アクティブトランザクションレコード(ATR)

トランザクションとして実行されるアプリケーションロジックを含むラムダブロックは、トランザクションライブラリによって複数回実行される可能性があります。この場合の各実行を、ここでは「試行」と呼びます。

各試行は、ドキュメントのメタデータにエントリーを追加します。このメタデータエントリーは、アクティブ・トランザクション・レコード(ATR)と呼ばれます。エントリー

元記事を表示

[Jersey]BeanValidationで入力値検証してみる

# はじめに

Tomcat + Jersey という構成の Web アプリケーションの動作を理解するために、[Tomcat Embed](https://mvnrepository.com/artifact/org.apache.tomcat.embed) を使って実験をしていきます。
いまどきこんな構成で開発を始めることは少ないかと思いますが、レガシーソフトウェアと戦う人たちの助けになれば幸いです。

## 関連記事の一覧(予定)

– [埋め込みTomcatでJerseyを動かしてみる](https://qiita.com/atti/items/fa3843f75c4bd669059a)
– [HK2でDIしてみる](https://qiita.com/atti/items/3f6f43c5168323344427)
– BeanValidationで入力値検証してみる ← イマココ
– TomcatとJerseyでトランザクション管理してみる

## リポジトリ

https://github.com/at6ue/tomcat_embed-jersey

なお、リポジトリは `

元記事を表示

SpringBootで非同期する時の設定値をラーメン屋の行列に喩える

SpringBoot環境でマルチスレッド処理を行う機会があり、これらの設定値の意味が分かりづらかったので記載。

### 設定

“`Java
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setQueueCapacity(3);
executor.setMaxPoolSize(3);
executor.initialize();
“`

### それぞれ何の値なのか?

CorePoolSize…スレッドプール内で待機しているスレッドの初期数。

QueueCapacity…CorePoolSize分のスレッドがすべて実行中の時にタスクが投げ込まれると、既存のスレッドに対して待ちタスクが発生する。その待ちタスクの最大値。

MaxPoolSize…タスクが投げられ続け待ちタスクが最大値を超えると、スレッドが増えていく。MaxPoolSizeより多くのス

元記事を表示

Eclipse でJavaFXを使用する方法(Mac)

## 最初に
とある課題でJava FXを使用してGUIを作らなければならなかったのですが、Eclipse上でJava FX Projectを作成、起動させる方法が非常にややこしくて忘れてしまいそうだったので、健忘録代わりに記載します。

まず前提として現在のEclipseで標準となっているJavaのComplilerはversion 16です。ただ、JavaFXはJava11までしか標準で入っていないため、Java11 のフルバージョンをインストールしたら自動でJava FXが使えるようになっている、、、、という記載だったのですが、僕の場合はうまくいかなかったです。
結局、AdoptOpenJDK 11.0.11をインストールしてパスを設定ー>その後JavaFXSDK をインストール->project毎にJavaFXを設定する
方法でしかうまくいきませんでした。

# ① javaJDK11, JavaFX SDKをインストールする
まず以下の記事を参考にJava11をMacにインストール+パスの設定をしてください。
なお、JDKにはAdoptOpenJDK 11.0.11 の他にも

元記事を表示

OTHERカテゴリの最新記事