JAVA関連のことを調べてみた

JAVA関連のことを調べてみた
目次

Java の標準 URI ライブラリが RFC 3986 に対応していないので、自作ライブラリで対応する羽目になった話

# はじめに

Java 開発者にとっては周知の事実かもしれませんが、Java の標準 URI ライブラリ (`java.net.URI` クラス) は未だに古い仕様である [RFC 2396](https://datatracker.ietf.org/doc/rfc2396/) をベースに実装されており、今日のデファクトスタンダードである [RFC 3986](https://datatracker.ietf.org/doc/rfc3986/) に完全準拠していません。[RFC 6749 (The OAuth 2.0 Authorization Framework)](https://datatracker.ietf.org/doc/rfc6749/) や他の規格・仕様によって RFC 3986 が参照されているにも関わらず標準ライブラリがそれに対応していないとなると、開発者としては不足部分を何らかの手段で補完せざるを得なくなります。かく言う私も自社製品の開発おいて他ライブラリで不足部分をカバーしていましたが、利用していたライブラリに不具合があること、それにも関わらずそのアップデート

元記事を表示

java:クラスを使って買い物システムを作ってみた

# はじめに
この度はこの記事をご覧いただきありがとうございます。今回はクラスについて学んだことを活かして商品の在庫管理と買い物のシステムを作成いたしました。アドバイス等あればご教授ください!

# システム概要
まず、商品を表す`Product`クラス、商品棚を表す`ProductShelf`、商品を入れるカートを表す`Cart`クラスを定義。その後これらのクラスを使って`App.java`で商品棚に商品を追加、削除し、追加された商品を実際にカートに入れて購入するシステムを作成した。
また、`Product`、`ProductShelf`、`Cart`は`Package`というパッケージ内に入っている。

# クラスの概要
今回使用したクラスのファイルを以下に記述する。
## Product
“`java
package Package;
public class Product {
//商品名
private String name;
//商品の値段
private int price;
//商品の在庫数
private int s

元記事を表示

[Google Cloud Speech-to-Text API(V2)] Javaで長時間実行オペレーションを取得する

Cloud Speech-to-Text API V2(Java)を使用して、
長時間実行オペレーションを取得する方法についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Cloud Speech-to-Text API(V2)] JavaでSpeech-to-Text APIを使ってみる](https://qiita.com/doran/items/8e4ef896588229c4fed3)
を参照ください。
:::

|No||目次|
|—|—|—|
|1||[オペレーション一覧を取得](#1-オペレーション一覧を取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[オペレーションを取得](#2-オペレーションを取得)|
||1|[スコープ](#21-スコープ)|
||2|[実行](#22-実行)|
||3|[レスポンスの内容](#23-レスポンスの内容)|

## 1. オペレー

元記事を表示

javaのプロトタイプ(Prototype)パターン

## はじめに

プロトタイプパターンは、既存のオブジェクトを複製することで新しいオブジェクトを生成するデザインパターンです。複雑なオブジェクトを一から作成するのではなく、既存のオブジェクトをコピーすることで効率的にオブジェクトを生成できます。

## プロトタイプパターンの概要

プロトタイプパターンは以下の要素で構成されます。

– Prototype (原型): 複製可能なオブジェクトを宣言するインターフェースまたは抽象クラス。
– ConcretePrototype (具体的な原型): Prototypeインターフェースを実装し、複製機能を提供する具体的なクラス。
– Client (利用者): 新しいオブジェクトを生成するために、Prototypeに複製を要求します。

## プロトタイプパターンの利点

– 複雑なオブジェクトを一から生成する必要がなくなり、コードがシンプルになります。
– 実行時に動的にオブジェクトを生成できます。
– サブクラス化を減らすことができます。

## サンプルコード (Java)

“`java
// Prototype インターフェース

元記事を表示

1時間でなんとなくわかった気になる Open Liberty でアプリケーション開発 & コンテナビルド & OpenShift へデプロイ

# はじめに
タイトルどおりのハンズオンです。
古すぎない Mac or Windows PC とインターネット接続、やり遂げる意志以外の前提条件はありません。
作成したコンテナのデプロイまで試したい場合は、OpenShift クラスター環境が必要です。

以下の記事は M1 Mac で検証 & 執筆しておりますので、Windows 組の方はよしなに読み替えて下さい。

# 準備
ハンズオン実施中はインターネットに接続している必要があります。

まずは Java がないと始まりません。
“`
% java -version
“`
として、Java 17 または 21 が見つかれば OK です。
なかった場合は Semeru Runtimes をインストールしましょう。
https://developer.ibm.com/languages/java/semeru-runtimes/downloads/
このハンズオンの作成は M1 Mac で Semeru Runtimes の 21 を使用しています。

Mac で複数の JDK インストールを切り替える方法は、”Mac Java

元記事を表示

[Google Cloud Speech-to-Text API(V2)] Javaで認識ツールを作成・更新・削除する

Cloud Speech-to-Text API V2(Java)を使用して、
認識ツールを作成・更新・削除する方法についてご紹介します。

**認識ツールとは**
認識ツールは構成可能で再利用可能な認識構成です。

頻繁に使用される認識構成を使用して認識ツールを作成すると、
認識リクエストを簡素化し、リクエストのサイズを削減できます。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Cloud Speech-to-Text API(V2)] JavaでSpeech-to-Text APIを使ってみる](https://qiita.com/doran/items/8e4ef896588229c4fed3)
を参照ください。
:::

|No||目次|
|—|—|—|
|1||[認識ツールを作成](#1-認識ツールを作成)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|
|2||[認識ツールを更新](#2-認識ツール

元記事を表示

(調査中)logback。java。JUnitでテストコードで、ログレベル変更

JUnitテストコードでLogbackのログレベルを変更することは可能です。Logbackの設定をプログラム内で変更することで、特定のテストケース内でログレベルを調整できます。以下は、その方法を示すサンプルコードです。

## 1. Logbackの依存関係を追加
まず、Mavenプロジェクトの場合は、pom.xmlにLogbackの依存関係を追加します。

“`java

ch.qos.logback
logback-classic
1.2.3
test

“`

## 2. テストコードでログレベルを変更

次に、JUnitテストコード内でLogbackのログレベルを変更する方法を示します。

“`java
import static org.junit.jupiter.api.Assertions.*;
import org.junit.

元記事を表示

(調査中)Spring MVC コンストラクタ内で例外が発生する状況のモック化

Mockitoを使用してコンストラクタ内で例外が発生する状況をテストすることができます。Mockito-inlineを利用することで、コンストラクタ内で特定の依存関係が例外をスローするようにモックし、その結果としてコンストラクタが適切に例外を処理するかどうかをテストできます。

以下に、例外処理をテストするための具体的な例を示します。

例: コンストラクタ内で例外が発生する状況のモック

## コントローラクラス
まず、例外処理を含むコントローラクラスを定義します。

“`java
import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Autowired;

@Controller
public class MyController {

private final MyService myService;
private String message;

@Autowired
public

元記事を表示

JUnit @ParameterizedTestをテキストブロックで超見やすくする!

# はじめに
JUnit5 テストの共通前処理用に `@BeforeEach` がありますが、複数のテストメソッドで前処理が異なる場合は `@Nested` でインナークラスを分けて、個別に `@BeforeEach` できます。しかし、これらの多くのケースでは `@ParameterizedTest` を使用することにより、`@Nested` と `@BeforeEach` 無しで、同じメソッドに対して複数の条件・期待値を繰り返し引数として渡せるユニットテストを簡潔に記述し、冗長性を回避することができるようになり、絶大な進歩をもたらしました。ですが、`@ParameterizedTest` に `@CsvSource` でソース上に指定する条件や期待値が String 配列のため、ダブルクォートとカンマで見た目がとても嫌でした。でも、Java 15 でサポートされたテキストブロックが遂に最新の JUnit 5.10 から使えるようになって、超見やすくなりました!(個人の感想です)

# テスト対象クラス
なんでもいいですが、例として Jakarta サーブレット。リクエストパラメータ

元記事を表示

[Google Cloud Speech-to-Text API(V2)] Javaでコンフィグレーションを取得する

Cloud Speech-to-Text API V2(Java)を使用して、
Speech-to-Textのコンフィグレーションを取得する方法についてご紹介します。

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Cloud Speech-to-Text API(V2)] JavaでSpeech-to-Text APIを使ってみる](https://qiita.com/doran/items/8e4ef896588229c4fed3)
を参照ください。
:::

|No||目次|
|—|—|—|
|1||[コンフィグを取得](#1-コンフィグを取得)|
||1|[スコープ](#11-スコープ)|
||2|[実行](#12-実行)|
||3|[レスポンスの内容](#13-レスポンスの内容)|

## 1. コンフィグを取得
Speech-to-Textのコンフィグレーションを取得します。

### 1.1. スコープ
OAuth2.0でこのAPIを実行するには、以下のスコープを指定してください。
サービスア

元記事を表示

argsの読み方について

引数【argument】argsは、アーギュメントと読む。

引数(argument)とは、プログラム中で関数やメソッド、サブルーチンなどを呼び出すときに渡す値のこと。渡された側は、その値に従って処理を行い、結果を返す。オペレーティングシステム(OS)の操作などで利用者がコマンドを実行する際に指定するパラメータ(コマンドライン引数)などを指すことがある。

以上

元記事を表示

ランダム処理が確率通りに実行されているかテストしたい!

こんにちは、サーバエンジニアの池脇と申します。

みなさんはランダムに実行される処理を実装した際に、その処理が設定した確率通りに振る舞っているかテストしたいと思ったことはないでしょうか?
今回は適合度検定を利用して、そのテストを行う方法をご紹介したいと思います。

## 適合度検定
適合度検定とは、観察されたデータが特定の理論的な分布(期待値)にどの程度適合しているかを検定する方法です。主に以下のような状況で使用されます。
– ある標本が特定の分布に従っているか確認したい場合
– 観察データが理論的な期待値に一致しているか評価したい場合

例えば、サイコロを十分な回数[^1]振って各面が出た回数を数え、それが公平なサイコロ(各面が1/6の確率で出現する)に従っているかどうかを確認する場合に適合度検定を使用します。
適合度検定は期待値がわかっている場合に利用できます。つまり、出力される値の出現率がわかっている場合にこれを利用してテストが可能です。

### カイ二乗検定
適合度検定の主要な手法の1つがカイ二乗検定です。カイ二乗検定は、カテゴリーデータに対して期待された頻度と観察された頻度

元記事を表示

Java Sliverに合格しました

# 初めに
この記事は初心者視点での説明になります。正確性に欠ける可能性がございますが、ご了承ください。明らな誤りがありましたら、ご指摘くださると幸いです。

## きっかけ
Javaを使用した開発案件に入りたいと思い、転職活動の準備を兼ねて資格取得に向けた学習を始めました。あとかっちりした言語を学びたいと思いJavaを少し齧ったところ、オブジェクト指向楽しい!となったので。

## 学習期間
4月末から学習を始め、5月13日に受験しました。
期間としては2週間と少し、勉強時間は100時間弱だと思います。かなり詰め込み学習になってしまったので、余裕がある方は2ヶ月くらいを想定するといいと思います。

## 使用した教材
まずは基礎固めのためスッキリわかるJava入門を1周しました。書籍で紹介されているWeb上のエディタ環境は動作が重めなので、余裕があれば自分のPC上に環境構築することをお勧めします。

自分は他の言語の学習経験があったのでサクサク進んだのですが、全くのプログラミング初心者ですと難しい部分も多いと思います。深く考えず、5割くらいの理解で進めても大丈夫です。

https:

元記事を表示

[Google Cloud Speech-to-Text API(V2)] Javaで認識精度を向上させるカスタムクラスを作成・更新・削除する

Cloud Speech-to-Text API V2(Java)を使用して、
認識精度を向上させるカスタムクラスを作成・更新・削除する方法についてご紹介します。

**カスタムクラス(CustomClass)とは**
カスタムクラス(CustomClass)はモデル適応機能を実現させるためのリソースの1つです。

モデル適応機能を使用すると提案される可能性がある他の候補よりも、
Speech-to-Textが特定の単語やフレーズをより高い頻度で認識するように設定できます。

カスタムクラス(CustomClass)リソースでは下記が設定できます。
|できること|概要|
|—|—|
|固有名称(店名や商品名など)の認識|カスタムクラスを使用すると、音声に出現した際に固有名称を正しく認識するように認識モデルにバイアスをかけることができます。|

:::note info
APIを利用する環境の準備から始める場合や、コードを実行する際は、
[⧉[Google Cloud Speech-to-Text API(V2)] JavaでSpeech-to-Text APIを使ってみる](h

元記事を表示

JavaScriptとJava間違えないで。ダメ。ゼッタイ。

どうもAtsu1209です。

突然ですが…
### 「JavaScriptとJavaは同じです。」
これを見て舌打ちをした方もいるんではないでしょうか。
でもよく間違えられます。

僕も台パンしました。

そこでめちゃくちゃ短くわかりやすく解説します。

# HelloWorld
ではまずは親の顔より見た`HelloWorld`を出力しましょう。

“`javascript:JavaScript
console.log(“HelloWorld”);
“`
簡単です。
続いてJava
“`java:Java
public class Main {
public static void main(String[] args) {

System.out.println(“Hello World”);

}
}
“`
“`console:コンパイル
javac Main.java
“`
“`console:実行
java Main
“`
:::note alert
Javaほとんどわからないので間違ってるかも
:::

元記事を表示

(java silver) あれこれ

## JavaSilverでメモしたところ備忘録として残しておこうと思います。
# エントリーポイント
* エントリーポイントの記述ミスはJavaのメソッドがっていればコンパイルが通るが、mainメソッドが認識されず例外が発生する
### エントリーポイント条件
1. public
1. static
1. void
1. string[]もしくはString…
1. mainというメソッド名(小文字)
1. 変数名(引数)を付ける※argsでなくてもよい
::::note
finalやthrowsをつけても実行される
::::

# カプセル化
* アクセス修飾子を適切に設定することで「フィールド」や「メソッド」へ外部のプログラムからのアクセスを制限します。クラス米の独立性が高まり想定しない操作をされないように制御することが可能
“`java
public class Car {
// フィールド
private String name; // 名前
private int Speed; // 速度
// コンストラクタ
public C

元記事を表示

(java silver) モジュール

# moduleとは
* パッケージを束ねるためのもので配下パッケージの権限を細かく設定できる
* モジュールの実行
“`java
java –module-path(-p) モジュールのルートディレクトリ –module(-m) モジュール名/モジュールのクラス
“`
* ほかのモジュールを利用する際はrequires宣言
“`java
module A {
requires java.net.http;
}
“`
* modul1が利用しているmodul2が利用しているmodul3をmodul1が利用したいときにはmodul1でrequiresする必要はなくmodul2でrequires transitiveを使用しmodul3を宣言する
“`java
module modul1 {
requires mod2;
}
———————————————–
module mod2 {
requires transitive module3;
}
“`

* モジュールは以下のパッケージはデフォルトで

元記事を表示

(java silver) 例外

## JavaSilverでメモしたところ備忘録として残しておこうと思います。

# 例外とは
* 実行中のプログラムを停止して異常終了すること、呼び出し先のメソッドでエラーが起こった時に使う

## throw文
* 例外を投げる(呼び出し先のメソッドに入る)

## try-catch-finally
* tryとは例外のある可能性の処理に入る(呼び出し元のメソッドでつくる)、例外が発生時にしてほしくない処理も書く
* catch(Exeption e)とは例外に対応する処理(呼び出し元のメソッドで作る)
* finally(必ず動作)とは発生した例外が()内の例外型だったときにのみcatchブロックが実行される、逆に()内の型でなければtryブロックの中の処理が呼ばれる

“`java
try{
例外が発生しうる処理(throw文とか);
}catch(例外のクラス名(例外型) e){
例外発生時の処理(例外型が一致したときのみ);
}finally{
例外発生の有無にかかわらず必ず動作する記述;
}
“`

# Errorクラス
* 重

元記事を表示

(java silver) API(LocalDateTime)

## JavaSilverでメモしたところ備忘録として残しておこうと思います。
# LocalDataTimeクラス
* immutable(不変)なオブジェクト(callenderクラスはmmutable)、下記の処理で分かる通りLocalDateTimeクラスでは2021年に変更後も変わらない

“`java
import java.time.LocalDataTime;
import java.util.calender;

public class Test {
public static void main(String[] args){
LocalDateTime day = LocalDateTime.of(2020,1,1,0,0,0,);
System.out.println(day);//2020-01-01T00:00
day.withYear(2021);
System.out.println(day);//2020-01-01T00:00

}
}

“`

元記事を表示

(java silver) 繰り返し処理(拡張for文・forEachメソッド)

## JavaSilverでメモしたところ備忘録として残しておこうと思います。
# 拡張for文
* 拡張for文は`配列`に対しての処理

* ループ処理中にremoveメソッドの呼び出しを行うと実行時エラーが発生する。ループする際にhasNextメソッドで要素数のチェックとエラー判定を行っているためループ中に削除して次に要素がなければエラーにならずループを抜ける

# forEachメソッド
* forEachは`コレクション(List,Map)`に対してループ処理を行う
“`java
forEach(引数 -> 繰り返し処理)
“`
* 拡張for文との違いは配列をそのままで扱うことができず、Listに変換する処理が必要
“`java
String[] exArray = {“a”,”b”,”c”,”d”}

Array.stream(exArray).forEach(s -> System.out.println(s));

::::note
Array.stream(配列名)は配列からStreamを作成するメソッドです
::::

元記事を表示

OTHERカテゴリの最新記事