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

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

Javaのメソッドで返り値を複数にする方法

Javaのメソッドは(2022年12月現在)一つの返り値しか返せませんが、以下の方法で擬似的に複数の値を返すことができます(他の方法もありますが一番シンプルでバグが発生する可能性が低いもののみ紹介します)。
## 型が同じ場合
返り値がすべて文字列など同じ型の場合は配列を使うといいでしょう。
“`java
public String[] retunMultipleStrings(String str) {
return str.split(“,”);
}
“`

## 様々な型の返り値を返したい場合
Javaはバージョン14から`record`というものが追加され、メソッドがなく複数のデータをまとめて保持したいだけの場合は`class`よりもシンプルに書けます。

“`java:MultipleValues.java
public record MultipleValues(String str, double probability, int point) {}
“`
使い方は以下の様になります。
“`java:Main.java
public static

元記事を表示

[Java]FTPs通信のアイドルタイムアウト回避

## 起きた問題

`spring-integration` のFTPSアダプター(`MessageSource` および `OutboundGateway`)を利用したFTPs通信を行うバッチ処理で、巨大なファイルの送受信を行うと **送受信完了後に例外が発生** して異常終了した。

## 直接原因

FTPsの **制御チャネルのアイドル状態が長時間化** し、通信経路中にある **ロードバランサのアイドルタイムアウトに抵触** したため。

## 根本原因

`DefaultFtpsSessionFactory#createClientInstance()` で生成される `FTPSClient` のインスタンスには、*controlKeepAliveTimeout* (※)が設定されていないため。

※ controlKeepAliveTimeout を設定すると、一定間隔で制御チャネルから無害なコマンド(NOOP)を送信するようになり、通信経路中にあるネットワーク機器のアイドルタイマーをリセットする効果がある

## 回避方法

`DefaultFtpsSessionFac

元記事を表示

Spring Bootプロジェクトの開始(VSCode)

## はじめに
今回はVSCodeでのSpring Bootプロジェクトの開始方法を書いていきます。
Macで作成しています。

最初に、表示からコマンドパレッドをクリック
![スクリーンショット 2022-12-26 16.37.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2613586/7523af8d-efb3-d3c8-8095-13b14dea1b59.png)

そうすると以下のような表示になります。
Spring Bootのプロジェクトには主に、「Gradle」と「Maven」がありますが、今回は「Gradle」で作成していきます。
![スクリーンショット 2022-12-26 16.37.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2613586/9d79972a-4e16-18e0-ce46-097376af79df.png)

次は、Spring Bootのバージョンを指定します。

元記事を表示

[Java] SerialVerisonIDの自動生成

たぶん適当でもいいんだけど、せっかく機能があるので紹介。
環境はIntelliJ IDEA。Kotlinでも使えた。

# 方法
`Ctrl + Shift + A`でアクションの検索画面を開き、`Serial`と入力。
`”JVM言語: ‘SerialVersionID’のないクラス”(Serializable class without ‘serialVersionUID’)`とあったらそれを選ぶ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883146/59f58a41-810a-a258-0ada-d4998d4b3937.png)

選択肢右側のトグルが`ON`になっていることを確認。なってなかったら再度クリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883146/a5c0efd6-d9f0-8bec-01c7-cb82fd5c1ef8.png)

`Seria

元記事を表示

Javaのラムダ式の例外ハンドリング(検査例外)に悩んだら。

### 悩んだこと

“`java
hogeSupplier.get(() -> {
try {
fugafuga();
} catch(Exception e) {
// Runtimeで投げる?何もしない?
// 【問題】考えたり定義するのがメンドクサーーーーーーーイ
}
});
“`

### 原因

* 原因はラムダ式ではなく、Java8 時点の `Supplier` が `throws Exception` になっていないから。
* 😥 <ラムダ式は検査例外扱えない~! * とか勘違いしていた。 * あくまでもFunctionalInterfaceのシグニチャの問題だった。 ### 解決した方法 * ならば `throws Exception` な `Supplier` を作ればいいじゃないのよ。 ```java:ThrowableSupplier.java @FunctionalInterface public inter

元記事を表示

職務経歴書

# 直近のプロジェクト
## 某省庁業務支援サービス開発(改修)プロジェクト (R.4.3/1 ~ 現在)
### 使用技術
Java(Spring)、Typescript、SQL(RDBMSはOracle)、ListCreator(富士通製ミドルウェア、帳票出力で用いる)、doma
### 役割
主に帳票出力機能のbackend(Java、SQL)を担当。
現時点では、Typescriptを用いたフロントエンドの開発にも従事している。
### 取り組んだこと
既存システムのJavaソースを流用することは可能であったが、フレームワークのリニューアルや帳票出力用の部品が既存システムと異なっていたので、先行して帳票出力機能を作成していた担当者との関係構築に注力し、問い合わせができる環境づくりに注力した。
また、ListCreatorを使用するのが初めてであったため、ゴールである帳票出力から逆算し、現在の自身に足りていない知識を紙に書き出し、その点について前述の担当者に教えを乞うた。成果として、3000人が使用する(試算)機能を開発することができた。
また、総合試験仕様書作成工程においては、

元記事を表示

JUnit5のParameterizedTestで網羅的なテストをする

# はじめに

JUnit4では、テストクラス単位でパラメータ化テストできましたが、JUnit5から、テストメソッド単位でできるようになりました。パラメタの提供方法も柔軟になり、パラメタのとりうるパターンを網羅するテストコードが書きやすくなっています。(JUnit4とJUnit5との比較は[こちら](https://parasoft.techmatrix.jp/how-to-expedite-the-creation-of-junit-parameterized-tests)の記事が参考になります。)
この記事では、JUnit5での異常値、境界値などの網羅性テストを書くためのサンプルコードを紹介していきます。

# パラメタがひとつのとき

## EnumSource

ステータスをEnumで実装している場合、EnumSourceをつかえば、Enumの全要素をテストすることができます。

“`java
public enum UserStatus {
ACTIVE,
PENDING,
INACTIVE;
}

public class UserService {

元記事を表示

Integer.decode を検証

“`java
public static void main(String[] args) {
Integer i = Integer.decode(“1”); //Decimal
System.out.println(i);
i = Integer.decode(“0xA”); //Hex
System.out.println(i);
i = Integer.decode(“#A”); //Hex
System.out.println(i);
i = Integer.decode(“011”); //Octal
System.out.println(i);
}
“`
“`
1
10
10
9
“`

元記事を表示

JavaでPDF内のテキストを検索、ハイライト表示、置換する方法

時には、特定のテキストを取得するために、PDFファイルを検索する必要がありますが、多くの同じ検索結果があるかもしれません。より便利にその位置を確認するために、背景色で検索されたテキストを強調する必要があります。無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)はまた、PDFファイル内で一つずつ新しいテキストで検索されたテキストを交換するためにサポートしています。この資料では、**PDFファイル内のテキストを検索し、強調表示し、置換する方法**を示しています。
– **[PDFファイルのすべてのページでテキストを検索してハイライト表示する](#pdfファイルのすべてのページでテキストを検索してハイライト表示する)**
– **[新しいテキストでPDF文書内のテキストを検索し、置換する](#新しいテキストでpdf文書内のテキストを検索し置換する)**
## 【依存関係の追加】
この方法は、無料のFree Spire.PDF for Javaが必要ですので、

元記事を表示

某ゲームでわかる!オブジェクト指向(ざっくり分かりたい人向け)

その昔、文系からシステム会社に就職したものの、基本情報試験合格という課題を課せられました。
午後の基本情報試験は選択問題があり、Javaで戦うことを決意し猛勉強を始めました。

ところが、全くabstractやclassの概念が頭に入らず、頭の良い人に泣きつくことにしました。

**※大まかな枠を掴むレベルなので詳しく知りたい方は別の記事をご覧ください**

## オブジェクト指向が分からない・・・
対策本とか読んでいると下記の3原則が出てきます。
・継承
・カプセル化
・ポリモーフィズム
これらを理解することでオブジェクト指向の理解度が大きく変わります。(個人的感想)

## Fateに置き換えて考えよう
私は特別Fateが好きとかではないのですが、ちょうどそのスマホゲームをやっていたので題材にしてくれました。
設計によって作り方は変わってきますのであくまで一例として認識いただければと思います。

## オブジェクト
英霊たちがオブジェクトにあたります。器を求めて攻撃したり、呪いをかけられたり、必殺技(メソッド)を使ったりします。
このクラスがわちゃわちゃすることで物語(システム

元記事を表示

Map・ハッシュ操作 【Java】【Kotlin】【Ruby】

# 概要
自主学習のアウトプットです。

現場でJavaのMapを操作していた時に、自分の書いたコードがまわりくどいやり方かなと思って調べたらいい方法を見つけたので備忘録です。(実際は周辺のコードと合わなくて使えませんでしたが。。)

学習中のKotlinとRubyで同じことするには?と調べたものも共有します。

# まわりくどいやり方
コードを書いてふと思いました。

「なんやこれ、まわりくど」

思わず声に出てしまったコードがこちら

“`Java:Java
Map pokemons = new HashMap();
pokemons.put(“Pikachu”, “ピカチュウ”);
pokemons.put(“Lapras”, “ラプラス”);
pokemons.put(“Snorlax”, “カビゴン”);
pokemons.put(“Venusaur”, “フシギバナ”);
pokemons.put(“Charizard”, “リザードン”);
pokemons.put(“Blastoise”, “カメックス”

元記事を表示

現場で活きる!Java Gold SE11

最近、わさびと山椒にはまっているアラサーです:metal_tone1:
今回はSE歴3年目の私が **Java Gold** を取得した経緯と現場で活かせた点について伝えたいと思います。

資格取得は、SE経験年数が浅い人ほど大切だと思っています。
その理由は主に3つ!
:apple:自身が理解できてない範囲を芋づる式に具体的に把握できるから
:apple:実践に必要な知識を体系的に取得できるから
:apple:現場の生産性がぐっと上がるから

これから**Java Gold**の取得を考えている人は、
既にJava Silver を取得しているため、製造の中で進行の妨げになるような困難にぶつかることは少ないと思います。

ただ、バグの少ないシステムを製造するにあたり、**Java Gold**の内容を取得しておくことは
実務で頻繁に利用する機能や技術もあれば、フレームワーク等が代わりにやってくれるために直接利用することがない機能、さらにそれを支える基盤的技術に至るまでの多様な知識を習得することになります。

全てを理解してこその製造であり、
バグのでないプログラムになると思います

元記事を表示

JavaエンジニアがRubyを使ってみて思ったこと

# 前説
– 株式会社SUPER STUDIOの2022年Adventarの記事です。
– 7年ぐらいJava(Spring)を使っていたエンジニアが初めてRuby(Rails)を使ってみた所感のまとめです。
– JavaもRubyもどちらもまだまだ未熟者が書いた記事です。
– Javaの最新のバージョンもキャッチアップできてないのでちょっと知識が古いです。
– Javaの方がいいとか、Rubyの方がいいとか、対立煽りを助長するつもりはありません。
– 自分と同じでJavaばかり使ってきて、Rubyとかどんな感じなんかなあって思ってる人に読んでもらえたら幸いです。

# Ruby(Rails)を使い始めて思ったことまとめ
– 型宣言が必要ない
– メソッドの引数にデフォルト値を設定できる
– メソッドの戻り値の型の定義が必要ない
– 最終行の結果がreturnされる
– 後置ifが使える
– if文の戻り値が設定できる
– ActiveRecordが便利

1個ずつ見ていきます。

## 型宣言が必要ない
これは解説不要かと思いますが、Rubyは動的型付け言語ですので、Javaのような

元記事を表示

【Java + localstack】DynamoDBトランザクションの実装(AWS SDK 1)

# Amazon DynamoDB Transactions
公式サイトのsampleソースを整理してみた。
[DynamoDB トランザクションの例](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/transaction-example.html)
いつもなら公式Githubへのリンクとか記載あるのですが、これ検索してもコードが見当たらなかったのがキッカケです。。

# 準備
localstackを使ってローカル環境で動作確認します。
localstack環境については過去記事を参考にしてください。
[LocalStack導入の準備](https://qiita.com/tmmii/items/49991365c247e612d178#localstack%E5%B0%8E%E5%85%A5%E3%81%AE%E6%BA%96%E5%82%99)
dynamodb-adminを利用してローカル環境でもDynamoDBにアクセスできるようにします。ブラウザからGUI操作が可能になるので便利で

元記事を表示

Springの@Autowiredの方式

# @Autowiredとは

SpringのDIコンテナから、インスタンスを注入するための指定のこと。
まずDIコンテナとSpringフレームワークの仕組みを知る必要がある。

## DIコンテナとは

アプリ起動時にSpringフレームワークが特定のオブジェクトをインスタンス化しており、そのインスタンスを保管してある場所。
次のアノテーションを付けたクラスがインスタンス化の対象。

– @Component
– @Controller
– @Service
– @Repository
– @RestController
– @ControllAdvice
– ManagedBean
– @Named

これらのアノテーションがついたクラスはコードのなかでnew()でインスタンス化することはなく、DIの仕組みによって呼び出し元クラスへ注入される。
それが@Autowiredアノテーションを目印にして行われる。

## 注入する方法

指定の場所により3種類の方法がある。

|種類|場所|備考|
|:-|:-|:-|
|コンストラクタインジェクション|コンストラ

元記事を表示

アルゴリズム クイックソート(昇順)






説明

配列の基準値(ピボット)より大きいものと小さいものとのグループに分け、それぞれの中でも新しい基準値を使って同様の作業を行うという手順を再帰的に繰り返し、並び替える。

“`java
public class Main {
public static void quickSort(int[]a,int left,int right) {

if (left>=right) {
return;
}

int p = a[(left+right)/2];
int l = left;
int r = right;
int tmp;

while(l<=r) { while(a[l] < p) { l++; } while(a[r] >

元記事を表示

基本情報の擬似言語をもとにクイックソート書いてみたその1

基本情報技術者の擬似言語の学習のため実際にプログラム化してみました。
仕様はそのままに一部アルゴリズム強化のため自分で自分で条件式等を考えているため実際の擬似言語プログラムとは差異があります。

基準値は(始まりの要素番号+終わりの要素番号)/2で決めております。別パターンも近いうち投稿したいと思います。

“`java:qiita.java
import java.util.*;

public class QuickSort {
public static void main(String[] args) {

// データ配列:[80, 60, 40, 70, 30, 10, 50, 20]
// int[] data_array = { 80, 60, 40, 70, 30, 10, 50, 20 };
// int[] data_array = { 80, 60, 40, 70, 30, 10, 50, 70 };
int[] data_array = { 70, 60, 40, 70, 30, 70, 50, 70 };
//

元記事を表示

ABC283A~Dの解答[Java]

## はじめに
今回はコンテスト中に書いたコードをDまでそのまま載せようと思います。

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

## A – Power
問題文は[こちら](https://atcoder.jp/contests/abc283/tasks/abc283_a)

$1$に$A$を$B$回かければ良いと思ってそれを実装しました。
“`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){

//A、Bの受け取り
int A = System.in.nextInt();
int B = System.in.nextInt();

//AをB回かける
int ans = 1;
wh

元記事を表示

WindowsでMavenを使えるようにする。

Javaでmvnコマンドが使いたくなったのでその時のメモです。
## Mavenのダウンロード
ApacheのサイトからMavenのZipファイルをダウンロードする。

https://maven.apache.org/download.cgi
## Mavenのフォルダを配置する。
Zipを回答しC:\Program Files配下に配置する。
※場所は環境変数PATHで指定できればどこでもよいがコマンドラインで利用するものはProgram Filesに置くのが一般的

## 環境変数の設定

### コマンドプロンプトで実行する場合

下記コマンドを実行する。
`SETX /M PATH “%PATH%;C:\Program Files\maven\bin”`

### GUI操作の場合

Windowsキーを押し検索バーから「システム環境変数の編集」を入力して選択
環境変数のPATHを選択し編集ボタンを押す。
![環境変数の指定(pic1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8924

元記事を表示

discord botでminecraft serverを操作する【総集編】

# 初めに
この記事は[discord botからminecraft serverを動かすことが目標のアドベントカレンダー](https://qiita.com/advent-calendar/2022/itohal)最終日です.

必要な環境は
– Python 3.8以降
– discord.py 2以上
– java 17以上

です.私の環境は
– WSL, Ubuntu22.04.1
– Python 3.10.6
– discord.py 2.1.0

となっています.

# discord botを作成する
まず,botを作成するためにアカウントを取得します.
[こちらの記事](https://qiita.com/halglobe0108/items/dc056cc48256eeff5526)で説明しています.[discord developer portal](https://discord.com/developers/docs/intro)にてアカウントを作成しましょう.このとき,トークンをコピーしておいてください.

# トークンを環境変数に設定
先程コピーしたト

元記事を表示

OTHERカテゴリの最新記事