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

JAVA関連のことを調べてみた2022年11月08日
目次

学校の課題「10倍整数型:IntegerX10」について真剣に実装してみた

# 課題内容

僕が通っている学校のある授業でこんな課題が出されました。

## 10倍整数型
Javaの`int`型の上限・下限を1桁増やし、-21474836489〜21474836479 の範囲の整数を扱う `IntegerX10` クラスを作成せよ。

なお、以下のひな型に沿って実装すること。(`…`の部分を自分で実装する)

“`java:IntegerX10.java
public class IntegerX10 {
// 1の位の値
public int value1;
// 10以上の位の値
public int value10;

public IntegerX10(…) {

}

public IntegerX10 add(IntegerX10 v) {

}

public String toString() {

}
}
“`

通常、`int`型は4バイトで表されるため、最大値`Integer.MAX_VALUE`は2147483647になりますが、それを1桁増や

元記事を表示

Java For Data Science

Events continuously happen all around the world. Often, we create a record of a unique event at a specific time and space. These recorded events collectively represent what we know as data. In contrast, data science uses scientific processes, systems, methods, and algorithms to abstract knowledge and insights from these structured and unstructured data.

Moreover, Data Science is an interdisciplinary approach that b

元記事を表示

【logic】銘柄コード取得APIのキャッシュ管理

# はじめに

過去記事は「[auカブコム証券のkabuステーションREST APIに関する記事一覧](https://qiita.com/hiuchida/items/611ba237dc1d1f6e3dca)」。

銘柄コード取得API(symbolnameFutureGet,symbolnameOptionGet)は、取得したコードと名称は変わらないため、キャッシュを保存して、後から参照する。

# 設計

現時点では、PUSH API受信ツールのみが銘柄コード取得APIを使用している。
テストするのに、WebSocket環境を用意する必要があり、モックサーバーでは開発できないので、銘柄コード取得部分を切り出した単体のツールToolSymbolNameを作成する。

キャッシュ管理クラス(SymbolNameLogic)はMapでキャッシュ管理するが、AutoCloseableを実装し、コンストラクタでファイルから読み込み、close()でファイルに保存する。
ファイルロックでの排他制御は行わない。
なお、キャッシュが変化していない場合は、保存しない。

キャッシュのキーは、複合

元記事を表示

Open LibertyとMicroProfile Reactive MessagingでKafkaのイベントを読み取る

Javaのアプリケーションサーバである [Open Liberty](https://openliberty.io/) では、MicroProfile Reactive Messagingと呼ばれる仕様のAPIを使うことでイベント処理することが可能です。

この記事ではMicroProfile Reactive MessagingでApache Kafkaのイベントを読み取って処理するConsumerを実装してみます。イベントの送信については別の記事で紹介する予定です。

![スクリーンショット 2022-11-06 21.54.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137947/9c45c24e-f10a-88e9-365f-d921de83f121.png)

## 本記事で使用するコンポーネント

本記事では以下のコンポーネント・バージョンを使用します。
今後のバージョンアップで動作しない可能性がありますので、本番投入する際には事前に手元で動作確認することをお勧めします。

|コン

元記事を表示

Box SDKでBox APIを使ってみる

# 概要
Boxに対して別のシステムからファイルのアップロード、削除やコラボレータの追加、削除などの操作をしたい場合に、BoxのAPIを利用しやすい形で提供しているBox SDKの使い方について記載したいと思います。

# Box SDKの準備
Box SDKは公式に各種言語向けに提供されています。今回はJavaSDKを使用しましたので、記事中のコードもJavaで記載しています。基本的には各操作に関して考え方は同じになると思います。
[SDKとツール \- Box開発者向けドキュメントポータル](https://ja.developer.box.com/sdks-and-tools/)

## インストール
SDKはMavenやGradleから入手することができます。[Box Java SDK](http://opensource.box.com/box-java-sdk/)
以下はMavenの例。
“`XML

com.box
box-java-sdk

元記事を表示

Service と Dao(DB処理) と Entity ざっくりまとめ

Java のDB処理で `Service` , `Dao` (Data Accesss Object) を使ったときのはなし
`Service` と `DAO` と `Entity` の関係をざっくりまとめる
細かいことは気にしない!!いったんは流れが分かればOK!!!!
説明で使ってるサンプルプロジェクトのおおもとは GitHub [java-webapp-clump](https://github.com/sueasen/java-webapp-clump) にあります
ここでは DB接続 の方法として以下の2つでやってみる
– JDBC (Java Database Connectivity)
昔から使われてるDB接続方法(DB処理を実行するための 標準仕様)
– JPA (Java Persistence API) :
開発でよく使われるDB接続方法(DB処理を実行するための ORM (Object-Relational Mapping) の仕様)
# DB接続のORM の FW (フレームワーク) はいろいろある...ここではJPA標準の Eclip

元記事を表示

【eclipse】Springスタータープロジェクトの名前をリファクタリング(変更)した際に出現するエラーの解消方法

## 前置き
プロジェクト名を変更しようと、以下キャプチャから修正したところ
多数のファイルで見慣れないコンパイルエラーが出現。
ググっても中々解決策を見つけられず意外と手こずったので、もし同じような事象で
困っている方がいたら、解決手段の一つとして参考にしていただけたらと思います。
![20221106-223259.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/dd9f8921-7cb1-e77a-06f2-e01fa5d7c527.png)

## 結論
自動生成されるsettings.gradleファイルの内容を修正する事で解決できる。
![20221106-233406.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2659821/d966f8eb-ef99-15a3-332b-dd78b59444f5.png)
以下キャプチャの”(シングルクォーテーション)内の値が古いプロジェクト名のままに

元記事を表示

【Java】コレクションの要素を削除するArrayListのremoveメソッドとIterator(イテレータ)のremoveメソッドの違い

**概要**
ArrayListの要素を削除するときの、下記2種類のremove()メソッドの挙動の違いを理解することを目的とし、Java API等の言語仕様説明を交えながらサンプルコードを動かします。
– ArrayListクラスのremove()メソッド
– ArrayListクラスのiterator()メソッドから取得したイテレータのremove()メソッド

実用性よりは知識を深めることに重点を置いた内容となっています。

**対象**
Java初級〜中級レベルの方に伝わる説明を心掛けています。

より具体的には…
– オブジェクト指向の入門レベルを一通り学び終えている人
– ArrayListの要素をループ内で思った通りに削除できなかった人
– 拡張for文でコレクションの要素を削除しようとしたら謎のエラーが出た人
– イテレータをあまり使ったことがない人
– 何となくでも「イテレータとは、ポインタとかカーソルとか矢印みたいに、コレクションの要素を指し示す何かそういうやつ」と分かっている人

## 1. コレクションの要素を削除するメソッドremove

ArrayList\

元記事を表示

JdbcTemplateはSQLインジェクション対策できているのか

## これは何?
SpringBatchプロジェクトにおいて、JdbcTemplateを使ってDBアクセス処理を書いていた際、「これってちゃんとSQLインジェクション対策できてるの?」という問いが生まれました。

公式を読んでみても「されてるよ!」という明言が見つからなかったため、ライブラリの中身まで確認し、調査してみました。

## 想定読者
* JdbcTemplateってSQLインジェクションされてるのか不安な人
* SpringBatch実装したことがある人
* 検証にはSpringBatchプロジェクトを利用しています。ステップやジョブの概念など、細かいものは省きます。

## 結論
**出来てる**と思って問題ないと思います。検証に利用したバージョンとメソッドは以下。
※調査内容が膨大になるので、今回一つのメソッドのみで検証しました。
※鵜呑みにはせず、ご自身のプロジェクト内で議論/検討/判断のうえ利用するようにしてくださいね。

### Version

spring-boot-starter-batch:2.7.0
内部的にはspring-jdbc:5.3.23が呼

元記事を表示

ABC276A~Eの解答[Java]

## はじめに
今回はコンテスト中にA~Eが解けたので、それをそのまま説明しようかと思います。

では、見ていきましょう。

## A – Rightmost
問題文は[こちら](https://atcoder.jp/contests/abc276/tasks/abc276_a)

StringのlastIndexOfを使いました。
“`A.java
class Main{

static final boolean autoFlush = false;
static final Library System = new Library(java.lang.System.in,java.lang.System.out,java.lang.System.err,autoFlush);

public static void main(String[] args){

//Sの受け取り
String S = System.in.next();
//aのindexを調べる
int ans = S.lastIndexOf(“a”);
//見つからなかったら-1

元記事を表示

Java Gold SE 11を受けての感想

# Java Gold SE 11の概要
## Java Gold SE 11(以下Java Gold)とは
Java Gold SE 11とは、オラクル認定資格の一つで、
* Java Bronze
* Java Silver
* Java Gold
の3つの試験の一番難しい資格のことです。
受けるにはJava Silverに合格していることが必要です。

## Java Goldの試験範囲
Java Goldの試験範囲は、以下の項目です。
細かい説明は[こちらのURL](https://www.oracle.com/jp/education/certification/1z0-816-jpn-31705-ja.html “Java SE 11 Programmer II (1Z0-816-JPN) 試験”)を参照してください。
* Javaの基礎
* 例外処理とアサーション
* Javaのインタフェース
* 汎用とコレクション
* 関数型インタフェースとラムダ式
* JavaストリームAPI
* 組込み関数型インタフェース
* ストリームに対するラムダ演算
* モジュール型アプリケ

元記事を表示

SpringBoot2.7以降のAutoConfigurationについて検証

# 概要

SpringBoot2.7にて、auto configuration されるライブラリ作成方法について、公式が推奨する方法が変わった。
– [SpringBoot2.7のリリースノート](https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.7-Release-Notes#building-jars-with-maven-shade-plugin-and-gradle-shadow-plugin)
– [公式ドキュメント](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features.developing-auto-configuration)

ここでは、推奨方法に従って auto configuration されるライブラリを作成し、それを実際に使ってみる。
ライブラリの機能としては、`/ping`エンドポイントにGETリクエストしたら `hello world`を返却するものを作る。

# ライブ

元記事を表示

SpringBootServletInitializerがTomcatで実行される仕組み

# 概要
Spring BootアプリをTomcatにデプロイして実行する場合、SpringBootServletInitializerを継承したクラスを作成することで実現するが、Servlet仕様でもないSpringBootServletInitializerを継承したクラスがなぜTomcatで実行されるのかについて述べる。

# Servlet仕様との紐づけ
ずばりSpring Webに含まれるServletContainerInitializerを実装したSpringServletContainerInitializerの仕業だ。以下がそのクラスだ。
“`java:SpringServletContainerInitializer.java
package org.springframework.web;

import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Serv

元記事を表示

IntelliJ IDEA (Windows, Java) & WSL2 開発環境構築(2022.11)

# なぜ IntelliJ IDEA & WSL2 なのか

1. VS Code や Eclipse ではなく IntelliJ IDEA で開発したいため
– Java の開発体験が良いと複数人から聞いている
2. Windows 上ではなく使い慣れた WSL2 上で開発したいため
– PowerShell? Git BASH? ご冗談でしょう?

少し検索したんですが絶妙に参考になる記事が存在しなかったため書き起こします。なお、現状 Windows 側の IntelliJ IDEA と JDK (WSL2) の組み合わせでの開発は発展途上感覚があり、他の選択肢の可能性も排除しない方が良さそうです。

## 既知の不具合

:::note warn
動作が極端に重い現象が発生しており、原因調査中です。Indexing が重いような気がしています。NFS でマウントされていて I/O が遅いんですかね。 **現状(最新版の?)IntelliJ IDEA & WSL2 は選択肢に入らない可能性があります。** 以下に記載する対策のいずれかを取る必要があります。公式サイト

元記事を表示

HTTPURLConnection で Jenkins を shutdown する

https://qiita.com/nururuv/items/b269af6ac5ac472ceab1
https://qiita.com/satosystems/items/ad49cefa837e80c5083b
https://qiita.com/naginx/items/21e77c67f02a1ae65a29
HttpURLConnection timeout settings
https://stackoverflow.com/questions/2799938/httpurlconnection-timeout-settings

“`java
URL url = new URL(“http://example.com”);
URLConnection conn = url.openConnection();
conn.setRequestProperty(“Authorization”, “Basic ” + Base64.encodeToString(“username:password”.getBytes(), Base64.NO_WRAP));
// conn

元記事を表示

Junit4 の framework で 複数テストを行う

## Junit4 の framework で遊んでみた

[このレポジトリ](https://github.com/junit-team/junit4/tree/main/src/main/java/junit/framework) に、Junit3 ライクなテストライブラリが入っている。しかし、このライブラリでは複数テストの実行は行えなさそうなので、それを実現してみた(tearDown や setUp関数のような関数を見れば、カスタマイズ向けなライブラリな感じもしなくはないが・・・)。

ここでは、test から始まるメソッドでテストを複数個行えるようにコードの改造を行なった。以下のコードが動くようになるのが目標。

“`diff_java
import junit.framework.Assert;
import junit.framework.TestCase;
import junit.framework.TestResult;

public class Sample {

public static class MathTest extends TestCase {

元記事を表示

gradle init で作ったプロジェクトをEclipseにインポートするとテストクラスがバージョン不一致エラー

# 事象
gradle init でJavaプロジェクトを作成しEclipseにインポートすると、spockのテストクラスでエラーが出たのでこの対応記録です。
依存関係のgroovyバージョンとEclipseのgroovyバージョンを合わせることで解消できました。

# 環境

* 環境変数のgradleバージョン
“`bash
$ gradle -v

————————————————————
Gradle 7.5.1
————————————————————

Build time: 2022-08-05 21:17:56 UTC
Revision: d1daa0cbf1a0103000b71484e1dbfe096e095918

Kotlin: 1.6.21
Groovy: 3.0.10
Ant: Apache Ant(TM) version 1.10.11 com

元記事を表示

Junit4 で どうしても アノテーションなしでテストしたい場合 (Maven, Gradle などは未使用)

## JUnit4 でどうしてもアノテーションなしでテストしたい場合
ここでは、Maven や Gradle なしで 素のJava で、アノテーションなしで Junit を使うコードを書きます。
Junit4 の内部構造を知る上で、ライブラリの使い方が載っていなかったので、記事にしました(コメントを読めば分かるんですが・・・)。

まずは、[Junit4 の src/main/java](https://github.com/junit-team/junit4/tree/main/src/main/java) の下の `junit` フォルダをプロジェクトの配下に置きます。
そして、テストを行いたいファイルで まず TestCase を継承したテストクラスを作成します。

“`java
import junit.framework.Assert;
import junit.framework.TestCase;
import junit.framework.TestResult;

public class Hoge {
public static class HogeTest

元記事を表示

入力した約数を全部列挙するプログラム 線形探索と改良版の2パターン(Java)

最近約数を全部列挙するプログラムをjavaで書く方法を2通り思いついたのでそれを書いていきたいと思います。(今後自分が競プロとか参加した時にどこかで使う機会もありそうだなと思ったのでメモとしての役割もありますが)
# そもそも約数って何?(一一”)
数学において整数 N の約数とは、N を割り切る整数またはそれらの集合のことである。(wikipediaより)

https://ja.wikipedia.org/wiki/%E7%B4%84%E6%95%B0

約数って何?って聞かれたときにこう答えられたらかっこいいですね。僕は「6÷2って整数で割り切れるよね?じゃこの時2は6の約数なんよね」といったノリで答えてしまいそうな気がします。
プログラム的には、数字a,b(0 < aかつ0 < b <= a)があり、a%b == 0 になる時bはaの約数と言えますね。 これを頭に入れてとりあえず組んでいきます。 # パターン1:とりあえず線形探索 ```Java:Divisor.java import java.util.*; public class Divisor { public

元記事を表示

【Java SE11 Gold】コンパイルエラーと実行時エラーの見分け方

## 前書き
:::note info
この記事は約5分で読めます
 Javaの基礎を習得している方向けの内容となっております
:::

Java Goldの勉強中に

「これはコンパイルエラーなのか?」「文法ミス以外にも結構コンパイラーでチェックしてくれるんだ!」

とコンパイルエラーのことで理解するのに時間がかかっていたので、今回は

コンパイルエラーと実行時エラーの違いと見分け方について解説していきます

勉強する中で疑問に思ったことや理解できなかったことを記事にして、

他の人や未来の自分が見返せるようにしていきたいと思います。

## 違い
エラーには、大きく分けて2種類あります。

1. コンパイルエラー
1. 実行時エラー

まず最初は、この区別をしっかりつけることが重要になります。

__コンパイルエラー__
>プログラミング言語で記述されたソースコードを機械語のコードに変換(コンパイル)する際に、何らかの致命的な問題が発生して失敗・中断すること。主な原因はプログラムを記述する際の記述ミスによるものが多い

__実行時エラー__
>コンピュータプログラムの実行時に発生す

元記事を表示

OTHERカテゴリの最新記事