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

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

Collection and its characteristics

Which should I choose: List, Set, or Map?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2948553/44a694d1-3d57-da35-c710-aec1a400cdd9.png)

元記事を表示

OpenJDK + OpenJFXでJavaアプリ開発環境構築

# はじめに
PCを新調したので改めてJavaの開発環境を構築したので,メモも兼ねて記事作成.

OpenJDK + OpenJFXのインストールとEclipse上の設定までの手順.

JavaFXを使うこともあって,あらかじめ同梱されてる(らしい)Liberica JDKというディストリビューションをつかおうと思いましたが,いろいろ詰まったので結局それぞれOpen JDKとOpenJFXでやることにしました.

## Open JDKとOpenJFXのインストール

### Open JDK

Oracleの[公式ページ](https://jdk.java.net/)より「JDK」からプラットフォームに合ったものをDLしましょう.
![スクリーンショット 2023-12-04 103442.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1857903/5f03880f-caca-d6f7-ec6c-9eae5b6ecc63.png)
![スクリーンショット 2023-12-04 104918.png]

元記事を表示

型システムから考えるPython, Java, Golangそれぞれの違い

# 初めに

## 背景

今までPythonを使ってきたのですが、転職先ではJavaとGolangを主に使用することになりました。特にPythonにはない型を意識した開発のメリット、JavaとGolangのintefaceの違いがあまりよく分からなかったので、調べてみました。
この記事では、PythonとJavaとGolangの違いについて触れ、そして記事の最後には GolangとJavaのintefaceを違いを明示しつつ、Pythonで書き直してみました。

## 対象読者

* 動的型付け言語しか使ったことない人
* JavaとGolangの違いがはっきり分からない人
* 型を意識したことがあまりない人

## シンプルな実装

まず、Python, Java, Golangの3つで一番シンプルなクラスを書いてみる。
Pythonは以下を見てもらうと分かる通り、Pythonを知らない人でも、理解できてしまうぐらいシンプル。

Pythonの場合

“`python:simpleなクラス(python)
clas

元記事を表示

DAO

DTO(Data Transfer Object)はデータ受け渡し専用のクラス
データを管理するフィールド変数とフィールド変数に対応したGetter・Setterで構成される。
型の異なるデータを一括で管理可能。

4.2 DAO/DTOパターン

元記事を表示

KotlinにおけるJava検査例外の扱いとSpringの@Transactionalの罠

Javaと同じような感覚でKotlin使えるわー、と考えていたら思わぬところでハマったので共有します

## 環境

* Spring Boot 3.1.5
* Amazon Corretto 17
* Kotlin 1.9.10

## Javaの検査例外と非検査例外

Javaには他の主要なプログラミング言語と異なり「検査例外」と呼ばれる例外が存在します。「検査例外」と「非検査例外」には以下の違いがあります。

1. 検査例外
* try-catchでハンドリング or throwsで呼び出し元に例外を伝播させないとコンパイルエラーになる例外
* → 検査しないとエラーになるので「検査例外」
* `Exception`を継承した例外のうち、非検査例外ではない例外が対象
* 代表的なものだと、IOExceptionやClassNotFoundExceptionなどが存在
1. 非検査例外
* 検査例外のようにハンドリングをしなくてもコンパイルエラーにならない例外(ハンドリングすることも可能)
* → 検査しなくてもエラー

元記事を表示

高機能enumとしてのSealed Classでワークフローシステムを作ってみる

## この記事は

[WEMEX株式会社 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/wemex)の4日目に出るはずの記事です。
Java21からSealed Class/Sealed Interfaceのswitch文/式でパターンマッチングが正式利用できるようになりました。
パターンマッチングの応用として、ワークフローシステムをイメージしながらどのようにSealed Class/Sealed Interfaceが使えそうか、試してみました。

## パターンマッチの有用性
Javaでパターンマッチングができるようになったのはわりと最近(Java16以降)ですが、ScalaやKotlinではそれ以前から利用されています。
Scalaの例ですが、[こちらのページ](https://scala-text.github.io/scala_text/case-class-and-pattern-matching.html)で書かれている通り、パターンマッチングには以下の長所があります。

> ノードの種類と構造によ

元記事を表示

Java21の新機能とJDK開発者の開発思想に触れてみる

# この記事について
Java21が2023年9月19日に正式リリースされました。
そこで、Java好きな筆者が記事執筆時点[^whenwriting]での最新バージョンであるJava21の新機能を調べ、の中で一部を抜粋し紹介します。
[^whenwriting]: 2023年10月31日

# 動機
筆者がJava21の新機能を調べようと思ったのは、以下の理由です。
– 単純にJavaが好きだから
– Javaの専門家のミドルウェアとしての設計・開発の思想を知り新たな学びを得たいと思ったから

本記事は、その調査を通じて得た知見を共有することを目的で執筆しております。

# 本記事の想定する読者
本記事は、以下のような方を読者として想定しています。
– Java21の新機能に興味がある人
– Java専門家のプロダクトとしての設計思想に触れたい人

後者について、OpenJDKの開発には現場経験が豊富なエンジニアが携わっています。その方々が現場で苦労した経験やあったら嬉しいと思った経験に基づいて新機能が開発されているため、それらの経緯を知ることで、その思想の一端に触れられるかと思いま

元記事を表示

画像を別の形式に変換するクソアプリ

[クソアプリ Advent Calendar 2023](https://qiita.com/advent-calendar/2023/kuso-app) 1日目の記事です。

アドベントカレンダーの記事投稿を終わらせた俺にかわせない攻撃は無い

# 前置き
おはようございます。DE-TEIUです。
冬の季語でおなじみのクソアプリアドベントカレンダーの時間です。

## 過去にアドベントカレンダー用に作ったクソアプリ
– [p5.jsで作ったダメなソリティア](https://qiita.com/de_teiu_tkg/items/c938fbb52218185659e7)
– [絶対に作業できない作業用BGMサイト](https://qiita.com/de_teiu_tkg/items/6ebcef3550507258edaf)
– [社会に一石を投じるクソアプリ開発](https://qiita.com/de_teiu_tkg/items/e82870eca1f265807dbe)
– [鼻毛が生えるカメラアプリ](https://qiita.com/de_teiu_tkg/it

元記事を表示

【Python】Java Access BridgeでJava自動化

# 目標

Java Access Bridgeを利用してJavaアプリを自動化する。

# 背景

ブラウザやWindowsアプリはたいていの場合、SeleniumやUIAutomationを利用すれば自動化できる。しかし、Javaアプリの場合、Java実行環境を介して実行しているためか、エレメント情報を取得することができず自動化することが難しい。
そこで調査したところ、JavaAccessBridgeというものを利用すればJavaアプリを自動化できるそう。
検証してみる。

UIAutomationではJavaのエレメント取得ができない理由については別の記事にまとめる。

# Java Access Bridgeとは何か

[公式](https://docs.oracle.com/javase/accessbridge/2.0.2/introduction.htm)の説明を読み解いていく。

> Microsoft Windows DLL で Java Accessibility API を公開するテクノロジで、Java Accessibility API を実装する Java ア

元記事を表示

第2回緑以下コンの解答[Java]

## はじめに
オンサイトで参加した[第2回緑以下コンテスト](https://yukicoder.me/contests/471)でなんとか全完できたので、その時のコードを載せようと思います。今回は基本自作ライブラリを使ってないのでそのままで動くと思います。

なお、感じたことをなるべくそのまま書くために普段以上に文体が崩れてるかと思いますが、ご了承ください。
では、見ていきましょう。

## A – 緑以下コンテスト
問題文は[こちら](https://yukicoder.me/problems/no/2557)

普通に三項演算子で良い感じに判定しました。
“`A.java
import java.util.*;
import java.io.*;
class Main{
private static final BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
private static final PrintWriter out =
new PrintWriter

元記事を表示

リクエストマッピング(@Request Mapping)

– 要請を送った時、どのコントロールラーが呼び出されるべきか、どのような方式で処理するかを定義する。
– @Request Mapping Annotationを使って要請を特定のmethodとmappingし、mappingする方法は以下がある。

# URL で mapping をする
– Url呼び出しが来たら、このメソッドが実行されるようにマッピングする。
– method属性でHTTPメソッド(GET、POST、HEAD、PUT、PATCH、DELETE)を指定しなければ、HTTPメソッドと関係なく呼び出される。
“`java
@RequestMapping(“/hello-basic”, method = RequestMethod.GET)
// 多重設定も可能である。
// @RequestMapping({“/hello-basic”, “/hello-go”}, method = RequestMethod.GET)
public String helloBasic() {
log.info(“helloBa

元記事を表示

Udemy講座2本(18時間と10時間)作成のプロセスと期間

### 自己紹介

皆さん、こんにちは、Udemy講師の斉藤賢哉です。私はこれまで、25年以上に渡って企業システムの開発に携わってきました。特にアーキテクトとして、ミッションクリティカルなシステムの技術設計や、Javaフレームワーク開発などの豊富な経験を有しています。様々なセミナーでの登壇や雑誌への技術記事寄稿の実績があり、また [「マスタリング Java EE 5」](https://amzn.asia/d/j0txqK5)や[「アプリケーションアーキテクチャ設計パターン」](https://amzn.asia/d/9avaCyF)といった書籍も執筆しています。

### Udemy講座のご紹介とクーポンコード(2023年12月末まで)

現在私が講師を務めるUdemy講座には、以下のラインアップがあります。
これらのコースは、**Udedmyセールス対象外のためタイミングを気にすることなく購入可能**です。また以下のリンクから購入いただくと、クーポンが適用されたことになり、定価の**約30%OFF**で購入することができます。

|コース名|リリース|定価|クーポン適用後価格|20

元記事を表示

【Java】IT未経験でJavaをやってみたい方にオススメの書籍

# はじめに
Java初心者のころにいろいろな本に手を出して苦戦したので、IT未経験でJavaをやってみたい方の役に立つようなオススメ書籍と読む順番をまとめてみます。
世の中こういう記事は大量にあるので、まあ誰かの役に立てば。。

# Java
初心者におすすめのタイトルを、読む順番に書いていきます。
内容については本の公式ページを見ればわかると思いますので、超個人的なコメントと共に書いていきます。

## 独習Java
https://www.shoeisha.co.jp/book/detail/9784798151120

はじめてJava言語を学ぶのにまず読むといいんじゃないかなと思います。
最初はソースコードを書く開発環境の用意をどうすればいいか分からない、そもそもその考えに至らない(私はそうでした)と思いますが、初めのイントロダクションで開発環境の使い方を説明しているので、書いて身につける環境がそろいます。
数年IT業界に従事して思ったんですが、技術者は知ってるだけでなく使えないと意味がないと思うので。。
この本で開発環境をそろえて、自分でコードを書いて動かしながら学習を進め

元記事を表示

日本語プログラミング言語 なでしこ3 Java C# で関数を介した整数カウントアップ実行時間を仲良く競う

# はじめに
日本語プログラミング言語 なでしこ3 とJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。なでしこワンはレガシーかもしれませんのでなでしこ3の検証を急ぎましたので、関数呼び出しが最初の記事となります。

https://qiita.com/advent-calendar/2023/nadesiko

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
nadesiko version 3.4.5 nadesiko3win32-3.4.5
Node.js v20.10.0.
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です

元記事を表示

VSCodeでJavaの開発環境をサクッと構築する

:::note info
本記事は新人向け社内研修資料の一部として作成したものです。
一部冗長な説明をしている箇所がありますがあしからず。
:::

## はじめに
javaの開発には、**テキストエディタ**と**javaのコンパイラ**と**javaの実行環境**が必要です。

どういうことかというと、例えばあなたが知らない国の舞台の脚本を任されたとします。そのとき、まずはあなたは自国語で台本を作成する必要がありますね。そして台本を作成したら、それを通訳に翻訳してもらって翻訳版の台本ができあがります。そして翻訳版の台本を知らない国の劇団に渡せば、知らない国で舞台が行われます。[^1]
上記の
– 自国語で台本を作成
– 通訳に翻訳してもらう
– 翻訳された台本をもとに舞台が行われる

がそれぞれ

– テキストエディタでソースコード作成
– コンパイラでソースコードをコンパイル
– コンパイルされたファイルを実行環境で実行

にあたります。

軽くそれぞれについて説明をすると、

テキストエディタはjavaのソースコードを作成するのに使います。
windowsユーザはメモ帳、mac

元記事を表示

Amazon CloudWatch Application Signals 徹底解説

## はじめに
こんにちは、Datadog Japan で Sales Engineer をしている AoTo(@AoTo0330) です。

この投稿は **[Japan AWS Jr. Champions Advent Calendar 2023](https://qiita.com/advent-calendar/2023/jr-champions) 3日目**の記事です。

AWS re:Invent 2023 で発表された多くの内容から、Observability や APM というキーワードに関連する重要な新機能を今回はご紹介します。その名も **Amazon CloudWatch Application Signals** です!

https://aws.amazon.com/about-aws/whats-new/2023/11/amazon-cloudwatch-applications-signals-observe-preview/

## A

ForwardではなくRedirectをした場合

# ForwardではなくRedirectをした場合
1~5までは[SpringMVCの大きな流れ](https://qiita.com/eunaa2934/items/8974cde05a15947956c2)を参照
6. **View名の代わりに**redirectが入った文字列を返す。(ex. return “redirect:/member/signup”;)
7. ViewResolverをスキップし、RedirectViewを通じて応答ヘッダーを作り出し、クライアントに応答を伝える。 (302: redirect)
![스크린샷 2023-12-02 22.19.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567846/ada0f13b-205e-ad57-7938-f00a576965b8.png)
8. クライアントは応答を受けて、ステータスコードが3xxだからLocationに書かれているurl(/member/signup)で**再リクエスト**するべきだと考え

なぜJavaではインターフェースだけ多重継承が許されているのか

# はじめに
Javaではクラスの多重継承ができませんが、例外的にインターフェースのみ多重継承が許されています。なぜこうした例外が許されているのでしょうか。

初心者向けの記事です。なぜこんな言語仕様にしたのか、といった話はしないのでよろしくお願いします。

# 多重継承ができない理由

一言で言うと親クラスが同名のメソッドを持っていた場合、子クラスの処理内容に矛盾が生じる可能性がからです。

便宜的にParent1とParent2の2つのクラスを用意します。

“`java
public class Parent1 {
public void sing() {
System.out.println(“演歌を歌う”);
}
}

“`

“`java
public class Parent2 {
public void sing() {
System.out.println(“ロックを歌う”);
}
}

“`

2つのクラスは同名のsingメソッドを持っていますが、処理内容が異なります。
もし、Parents1と

JAVA の勉強メモ-double とfloat の違い

floatの場合↓

“`java
class Main {
public static void main(String[] args) {
// Name
String name =”HPP”;
// 年齢
int age = 20;
// 身長
float height = 162.8f;
// 体重
float weight = 60.0f;

// 変数bmiにBMIを計算
float bmi = weight / height / height ;

// 名前、年齢、身長、体重、BMIに関する情報を出力してください
System.out.println(“名前は” + name + “です”);
System.out.println(“年齢は” + age + “歳です”);
System.out.println(“身長は” + heigh

いまさら初めて Ant のビルドファイルを書いたので、逆引きの備忘録を残す

# はじめに
これまで、CI/CD のプロジェクト導入を通じて、各種のビルドプロセスの自動化に関わってきましたが、今になって初めて Ant のビルドファイルを書く機会がありました。

現在、Java のビルドツールでは主に Maven もしくは Gradle が使われています[^1]。そのため、Web上の記事も Maven/Gradle に比べ Ant は比較的少ないようで、欲しい情報にたどり着くのに苦労しました。例えば、Qiita で Maven/Gradle/Ant のタグがついた記事はそれぞれ 932/1723/89 記事でした。桁が違いますね。

ちなみに、Google Trend で過去10年の人気度推移を比較すると以下のようなグラフになりました。

一応 [公式ドキュメント](https://ant.apache