JAVA関連のことを調べてみた2023年01月23日

JAVA関連のことを調べてみた2023年01月23日

Adobe Document Generation APIで動的なPDFを作成しよう

## Adobe Document Generation APIとは
[Adobe Acrobat Services](https://developer.adobe.com/document-services/) (2022年12月 Adobe Document Servicesという名前から名称が変更されました)はPDFに関する様々なAPIサービスを提供していますが、今回はこの中の1つ、[Adobe Document Generation API](https://developer.adobe.com/document-services/apis/doc-generation/)を紹介します。

### Adobe Document Generation API
Adobe Document Generation APIはテンプレートとテンプレートに差し込むデータから、PDF(またはWordドキュメント)を作成するAPIです。PDFの作成処理はクラウド上で行われます。テンプレートとなるドキュメントは、Wordドキュメント、データはJSON形式で用意します。従来、こういった動的なP

元記事を表示

JUnit 実践入門 メモ

## テストフェーズ
フェーズ1: 事前準備
ここで、テスト対象の初期化、必要な入力値、期待される結果などの準備を行う
フェーズ2: 実行
テスト対象オブジェクトに対して、テストする操作を行う
フェーズ3: 検証
テスト結果として得られた実測値が期待値と等価であるかを比較検証する。
フェーズ4: 後処理
次のテストに影響が出ないように処理を行う

## アノテーション
@Test
テストを行うことを宣言する
@Ignore
一時的にテスト実行から除外する
@Before
重複する初期化処理を@Before内で設定することで、何度も同じコードを書く必要がなくなる。
@After
テスト実行後の後処理時に使用するアノテーション

## モックとスタブ
どちらもテスト対象が依存するクラスやモジュールの代用として使用するクラスやモジュール。モックの使用する理由は、目的のメソッドがテストの実行中に呼び出されたかを検証するため。スタブは予測が難しいテストケースを検証可能なテストケースに変えるため。
## Mockito
モックとスタブを利用する際に、利用される外部ライブラリ。
### Mocki

元記事を表示

【Android】Observableで監視をしながらレイアウトを変える方法

# はじめに
こんにちは!
アプリ作成にボタンってほぼ必ずと言っていいほど使用しますよね?
そしてボタンを切り替えることをするかもしれないです。
例えば、ある処理を実行した後にボタンのグレーアウトを解除するとか、
ある処理の時はこのボタンを表示して別の処理の時はこのボタンを表示させるとかですね。
もちろんこれはボタンだけではなくテキストとかでも色々言えることだと思います。
この時まだ表示・非表示ならsetVisibility、文字列切り替えならsetTextとか使っていませんか?
もちろん場合によっては使用することもあるかもしれないですが、もし知らないのであればこれから書いていくObservableで切り替える方法を知っておくと便利かもしれないです。

# Observableとは
ここではObservableはざっくりにしておきましょう。
話は戻りますがObservableとは値が変更された時に値が変更されたことを通知できるものになります。
これはString型やBoolean型に限らず例えば ”Hello” → “would” に変わった時 true → false に変わった時な

元記事を表示

validation @Maxと@Minを使って、日付データを制御する

bean validationとは、springで有効性検証のための標準、アノテーションベースの制約条件で簡単に検証できます。
bean validationが提供するアノテーションを使って日付データを除去してみようと思います。

validationを適用していない挙動

テストコード、givenPersonのsetBirthdayに存在しない日付をセットするようにして挙動を確認する。

“`java:テストコード
@Test
void findByBirthdayBetween() {
givenPerson(“martin”,10,”A”,LocalDate.of(1991,2,21));
givenPerson(“david”,9,”B”,LocalDate.of(1992,7,1));
givenPerson(“dennis”,8,”O”,LocalDate.of(1993,1,5));
givenPerson(“sophia”,7,”AB”,LocalDate.of(1994,6,30));
givenPe

元記事を表示

【Java】CollectorsAPI 1000本ノック

# ソースコード
https://github.com/tttol/collectors-api-sample

# toCollection
“`java
ArrayList list = Stream.of(“a”, “b”, “c”).collect(Collectors.toCollection(ArrayList::new));
LinkedList linkedList = Stream.of(“a”, “b”, “c”).collect(Collectors.toCollection(LinkedList::new));
“`
Stream型を任意のListに変換する。
Java17からは、`Stream.toList`を使ったほうがいい。

“`java
List list = Stream.of(“a”, “b”, “c”).toList();
“`

# toSet
“`java
Set set = Stream.of(“a”,

元記事を表示

ABC286A~Eの解答[Java]

## はじめに
今回もEまで解けたのでコンテスト中に提出したものを載せます。

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

## A – Range Swap
問題文は[こちら](https://atcoder.jp/contests/abc286/tasks/abc286_a)

for文を5つ書いてそれぞれの区間を出力しました。
“`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){

//各値の受け取り
int N = System.in.nextInt();
int P = System.in.nextInt();
int Q = System.in.nextInt();
int R

元記事を表示

targetSdkVersionを31にするときの3つの注意点

2022年11月から、GooglePlayストアにアプリのアップデートを公開する場合、targetSdkVersionを31にしないと公開できなくなりました。

機能を追加したし、あとはtargetSdkVersionを上げるだけ・・・
ってビルドできない!動かない!

という事に今回遭遇したので、targetSdkVersionを31にした時の注意点3選を書いていきたいと思います。

# 1.Android 12端末でアプリ起動時のIllegalArgumentExceptionに対応する
Android 12端末で起動しようとすると以下のエラーが吐かれてアプリ落ちします。
Android 11以前であれば普通に起動します。
“`
Fatal Exception: java.lang.IllegalArgumentException: com.highcom.todolog: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified whe

元記事を表示

[Java]依存性の注入(Dependency Injection)の理解が曖昧な方への説明

### はじめに
この記事は依存性の注入の概念に集中するため、
なぜ依存性の注入を使うのかメリットは何かは詳しく説明しないです。

### 依存性の注入(Dependency Injection)とは?
#### 定義
依存性の注入(Dependency Injection)、もしくは依存性注入、依存注入、DIと呼ばれています。
[Wikipedia](https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5)により、依存性の注入とはあるオブジェクトや関数が、
依存する他のオブジェクトや関数を受け取るデザインパターンであると書いてありますが、
なかなか理解しづらいですね、、、
#### 具体的な例
それでは現実の物を使って理解しましょう。
例えば、車はエンジンがないと動けないので、この時に車はエンジンに依存すると言えるでしょう。
(エンジンは車の依存)
こういう関係は依存性と言います。これだけです。

### 依存性の注入を使わない場合
車(Car)とエンジン(Engine)

元記事を表示

Android 非公開APIの見分け方

# 非公開APIとは
AndroidにはAPIの種類があります。
殆どの方が使用するのは、publicAPI(AndroidStudioで開発する際誰もが使用できるAPI)だと思います。
[Android Code Serarch UserHandle#myUserId()](https://cs.android.com/android/platform/superproject/+/master:frameworks/base/core/java/android/os/UserHandle.java;l=551?q=UserHandle.java)を見てみるとMethodの上に@SystemApiや@hideやらついています。

これらのAPIは普段3rdParty(GooglePlayからインストールするようなApp)では使用できないAPIになります。
じゃなぜこれの説明をするのって??
日々の業務の中でPre-inAppを作成しており、そのAppを配信化する事になりました。

しかし!!先ほど説明した非公開API(@SysteApiや@hideがついているMethod)は使用しな

元記事を表示

AndroidアプリでOpenCVを利用しようとした際のGradle Syncエラー対策

# はじめに
Android Application(Java)上でOpenCVを取り込んで動かそうとした際に引っかかったこととその対処のメモです。
ほとんど自分用に備忘録になります。
OpenCV SDKのバージョン:4.7.0

# OpenCVの取り込み
Android StudioへのOpenCVの取り込みはすでに分かりやすくい記載されている方がいるので以下を参照

https://qiita.com/tifa2chan/items/a2ec4f5d90eeb9cf1802

# GradleのSync error
参考ページのOpenCVの取り込みを実施し、openCVでモジュール名を設定しFinishしたところGradleのsyncで以下のエラーが発生
“`
Plugin with id ‘kotlin-android’ not found
“`

# 対応策
対処方法について調べていたところ以下に対策の記載があった

https://coskxlabsite.stars.ne.jp/html/android/OpenCVpreview/OpenCVpreview_A.

元記事を表示

Spigotサーバーで動くカスタムクラフターを作りました

# カスタムクラフターとは
新しいクラフトレシピを追加するプラグインです。
バニラのクラフトは3*3スロットですが、このプラグインは6*6スロットのレシピまで対応しています。

# 処理の流れ
– プレイヤーが作業台をクリックしたら、作業台の下3*3のブロックがコンフィグファイルで指定されているブロックと一致するか調べる。
– クラフトボタンをクリックしたら、配置されたアイテムを処理機構にぶち込んで完成品を検索する。
– 終わり

# 処理機構とは
処理の流れ2つ目の「処理機構」の中身をあれこれと書いていきます。
出来ればここ(↓)

https://github.com/Sakaki-Aruka/custom-crafter/tree/master/src/main/java/com/github/sakakiaruka/cutomcrafter/customcrafter/listeners/clickInventorysMethods

にあるSearch.java と SearchVanilla.java を見ながら読み進めてください。

## 処理の種類
クリックの種類

元記事を表示

データの入れ替え・退避変数・多重代入

# これは何?

https://qiita.com/nodai2h_ITC/items/6c7b7ad029adf17da5f0#%E9%80%80%E9%81%BF%E5%A4%89%E6%95%B0%E3%81%AF%E5%BF%85%E8%A6%81%E3%81%98%E3%82%83%E3%81%AA%E3%81%84

で退避変数が必要だと教科書に書いてあるとか、そのあたりが面白かったので調べた。

# 多重代入での入れ替え

Python, Go, Ruby なんかは多重代入がある。

配列の要素を入れ替えるのであれば

“`python:python,go,ruby
a[i], a[j] = a[j], a[i]
“`

のように書ける。

引用元の記事では

> もちろん、パフォーマンスを考えると多重代入より退避変数を使ったほうがいいでしょう。

となっているが、手元で試したところ、ruby 以外は速度差を観測できなかった。

ruby は多重代入のほうがはっきりと遅かった。さすが。

多重代入で書いたほうが速いケースもありそうだと思っているが、そういうパターンは

元記事を表示

【webアプリ・Java・jsp/servlet】index.jsp

## webアプリ作成で詰まった!

#### 人生で2度目となるwebアプリ作成
イチから全てを作成するのが2度目になるのですがほとんど1度目と言って良いくらい**何もかも**忘れていました。
#### 【問題】CSSのレイアウトが反映されない!!
—環境—
webアプリ作成環境としては
・Eclipse
・java11
・jsp/servlet
・Apache(アプリケーションサーバ)

サーバーサイドのコーディングをしている時はアプリケーションは一見正常に作動しているように見えたのですが、サーバーサイドのコーディングがひと段落ついたのでフロント部分をコーディングし、作動してみるとcssが全く反映されませんでした。
。。。。

#### 気づくのに2日(作業8時間)
正直諦めかけました。色々と試行錯誤する上でなんとか辿り着きました。

### ウェルカムページの設定が間違っていた。
ウェルカムページとはTopServletなど最初のページに指定しているURLパターン(リンクみたいな)の事を言います。
https://www.yahoo.co.jp/
上記のyahooのtop

元記事を表示

No property {Column} found for type {Entity}エラーが出て、@Queryを使ってみた

以下のコードでは、Person EntityにPersonを保存して誕生日の月データが”8月”の人を検索しています。

“`java:PersonRepositoryTest.java
@Test
void findByBirthdayBetween() {
givenPerson(“martin”,10,”A”,LocalDate.of(1991,8,15));
givenPerson(“david”,9,”B”,LocalDate.of(1992,7,1));
givenPerson(“dennis”,8,”O”,LocalDate.of(1993,1,5));
givenPerson(“sophia”,7,”AB”,LocalDate.of(1994,6,30));
givenPerson(“benny”,6,”A”,LocalDate.of(1995,8,30));

List result = personRepository.findB

元記事を表示

確実に動くGWT開発環境を作る

2023年1月 windows10 で開発できる環境を用意

・GWT(旧Google Web Toolkit)は情報は多いものの、古かったり、動かない事例が紹介されており、苦労した挙句に開発環境が作れない状態です。
 そこで、かなり初期から開発しているワイですが、確実に動く、GWT開発環境をzipファイル化して、作成手順をまとめましたので、ご利用ください。

■Eclipse 4.6 + GWT プラグイン
https://drive.google.com/file/d/1-IaQOlnH1IsYzSbBbHO7_pzST4hbJq4L/view?usp=sharing
(*)ちょい古いですが、動作確認しています。

■セットアップ方法
(1)ダウンロードする
(2)ファイルを解凍
(3)回答したフォルダの中のpleiades-4.6をCドライブ直下へ移動
  (*)GWTの設定がCから基準になっているので
  C:\pleiades-4.6\pleiades\eclipse
  こんな感じになっていればよい
![image.png](https://qiita-image-stor

元記事を表示

rJavaのロード時のエラーへの対処

注) Windowsでの対処法を記載しています。Macとは手順が異なる場合があるので注意してください。

RでJavaを動かせる**rJava**というパッケージがあります。テキストデータの処理などで使うことがありました。便利なパッケージですが、エラーメッセージが出て使えないという話をよく頂きます。今回は、その対象法について説明します。

# エラーについて
インストールを行ったあとに、libraryでrJavaをロードします。
“`r
# install.packages(‘rJava’)
library(rJava)
“`
しかし、以下のエラーメッセージが表示される場合があります。使っているOSでエラーメッセージが違うみたいですね。
– Windows
“`
Error: package or namespace load failed for ‘rJava’: .onLoad は loadNamespace()(’rJava’ に対する)の中で失敗しました、詳細は: call: fun(libname, pkgname) error: JAVA_HOME c

元記事を表示

Java Timeで月末日を取得する

# TL; DR

`java.time.temporal.TemporalAdjusters.lastDayOfMonth()` を使う。

# 実証コード 

“`java
// Java
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

import static java.time.temporal.TemporalAdjusters.lastDayOfMonth;

public class Test {
public static void main(String[] args) {
LocalDate date1 = LocalDate.of(2023, 2, 15);
LocalDate date2 = LocalDate.of(2024, 2, 15);

System.out.println(date1.with(lastDayOfMonth()).format(DateTimeFormatter.ISO_LOCAL

元記事を表示

Calendarクラスで、今日、明日、明後日、昨日、一昨日、来年、昨年の日付を取得する

## 目次
 [1.DateクラスとCalendarクラスのちがい](#1-DateクラスとCalendarクラスのちがい)
 [2.今日、明日、明後日、昨日、一昨日、来年、昨年の日付を取得する](#2-今日明日明後日昨日一昨日来年昨年の日付を取得する)

## 1. DateクラスとCalendarクラスのちがい
### Dateクラス
簡単に日付を表示したい場合などに使用。
現在は非推奨のため基本的にCalendarクラスを使用するのが望ましい。

“`java
package jp.co.study.sample;

import java.util.Date;

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

Date date = new Date();
System.out.println(date.toString());
}
}
“`
出力結果は、Thu Jan 19 19:07:48 JST 2023

下記のようにすると、フォーマットを指定できる。
“`java
p

元記事を表示

JAVA バージョン変更 Mac

## はじめに
今回は、Javanoバージョン変更方法について書いていきます。簡単です。
PCはMacです。今回はJava19.0.1をJava17.0.5に変更します。

## 現在のJavaのバージョンを確認していく

まず、現在のJavaのバージョンを確認していきます。
“`
~ % java -version
java version “19.0.1” 2022-10-18
Java(TM) SE Runtime Environment (build 19.0.1+10-21)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
“`

このコマンドで、現在のJavaのバージョンは19.0.1であるとわかります。

## インストールされているJavaのバージョンを確認する
次は、変更するJavaのバージョン17.0.5がインストールされているか確認します。

“`
~ % /usr/libexec/java_home -V
Matching Java Virtual

元記事を表示

Javaで無料のタイムスタンプサービスに接続する

## タイムスタンプサービス

無料でタイムスタンプトークンを発行するサービス、[Free TSA Project](http://eswg.jnsa.org/sandbox/freetsa/) に接続します。

## タイムスタンププロトコル

タイムスタンプに関わる仕様は、[RFC3161](https://datatracker.ietf.org/doc/html/rfc3161)、[RFC5816](https://datatracker.ietf.org/doc/html/rfc5816) で 定義されています。

HTTP通信で行う際の仕様が [RFC3161 の 3.4 Time-Stamp Protocol via HTTP](https://datatracker.ietf.org/doc/html/rfc3161#section-3.4) に記載されています。

## タイムスタンプサービスへの接続

今回は、[HttpClientクラス](https://docs.oracle.com/javase/jp/17/docs/api/java.net.http/jav

元記事を表示

OTHERカテゴリの最新記事