JAVA関連のことを調べてみた2020年10月25日

JAVA関連のことを調べてみた2020年10月25日

Migration Toolkit for Application Binariesを使ってみた

IBMから出ているMigration Toolkit for Application Binariesは無料のツールでJavaアプリケーションのバージョン間の移行やLibertyへのマイグレーションを診断してくれるツールです。診断を行うためにはJavaアプリケーションのwar/earファイルが必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59741/83b50e9a-40a6-e785-74d9-ba6c8b3172ed.png)

https://developer.ibm.com/wasdev/downloads/#asset/tools-Migration_Toolkit_for_Application_Binaries

手順は
– JDKのインストール
– このMigration Toolkitのダウンロード、インストール
– war/earファイルの準備
– 診断の実行
* 私はWindows 10の環境でやってみました。JavaがあればMac, Linuxでも

元記事を表示

Javaサーブレット 14 – 提出課題 社員情報管理ツール – 05

### 7. Class#forName再考

#### 7.1. Class#foName処理

ロジックの生成にClass.forName()を使うべきか。このメソッドは何をしているのか。

クラスを取得する。ここでいうクラスとは、Javaコンパイラーが生成するclass拡張子付きのクラスファイルがJVMのメモリに読み込まれ、利用可能な状態に構成されたもの。まず、クラスは、クラスローダーによってメモリに読み込まれる。次に、利用可能な状態にするために、クラスの静的な(static)メンバーの初期化、静的初期化子の実行を一度だけ行う。 以下の例はClass#forNameを使用してorg.h2.Driverクラスをメモリーにロードする。

“`Java
Class.forName(“org.h2.Driver”);
“`

org.h2.Driverのソースコードを一部引用する。このクラスがメモリーにロードされると、staticで修飾された静的変数の初期化と、staticブロック(静的初期化子)が一度だけ実行される。その後、このクラスのインスタンスをnewしたり、静的メソッドを呼べ

元記事を表示

Java GradleからのDocker利用

今回に限らず巨人の肩に乗ってパッケージを便利にしてきますか。
[前回](https://qiita.com/akotadakura/items/6256cfc51934db2ad8a8)のパッケージをさっくり作ったところからスタートします。
なお、繰り返しですが[ソースコード](https://github.com/akotadakura/gradle-docker)あります。
適宜ご覧ください(READMEの口調が荒いですがお許しくだされ)。

### 導入プラグイン
今回利用するのは、米Palantir Technologies(データ分析業)の開発している、
docker pluginたちです。
「たち」というのは、docker, docker-run, docker-composeそれぞれに独立のプラグインがあるからですね。
https://github.com/palantir/gradle-docker
composeは今回はいいかなぁ…
ひとまずはgradleからcontainer起動までこぎつける、ここまでを扱います。

### 各手順

#### 1. Docke

元記事を表示

Gradleジャーニー:快適なパッケージを求めて

ほぼ動的型付け言語しか使用しないチームに転職し、
┌( ^o^┌ )┐ <- これのごとく型付けェ型付けェと禁断症状に... 欲求不満に任せ、いつのまにか理想のGradleパッケージのジャーニーへと旅立っていました。 せっかくなので情報整理がてらやりたいこと・過程を紹介します。 あと、Githubにpublicのrepositoryを作っているので、 それをご覧いただくもよし、そのまま流用するもよし(そんな価値があればよいですが...)。 Github Link: [gradle-docker](https://github.com/akotadakura/gradle-docker) ※本記事はJava/Gradle/Dockerなど基礎知識はすでにある前提でお読みください。 ### やりたいこと 1. [Dockerにすんなり疎通できる](https://qiita.com/akotadakura/items/ceafd0aea8e419bd1197) 2. テストのフローはきっちり(Junit*Matcher - Jacocoでカバレッジ)(YET) 3. Logも今風(slf

元記事を表示

ラムダ、ソート、無名関数の例

import java.util.*;
import java.util.function.Predicate;
import java.util.Comparator;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

// ソートのテスト
// https://techacademy.jp/magazine/34841
class Test1 {
public static void ソートテスト() {

//小さい順
// List num1 = new ArrayList<>(Arrays.asList(100,35,72));

// Collections.sort(num1);

// for (Integer a : num1) {
// System.out.

元記事を表示

google-java-formatの適用

#はじめに
JavaCodeスタイルはたくさんありますが、
例えば:
Javaコーディング規約:https://future-architect.github.io/coding-standards/documents/forJava/Java%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0%E8%A6%8F%E7%B4%84.html

Google Java Style:https://google.github.io/styleguide/javaguide.html

Codeのフォーマッタがあると便利だと思われます。

#Google Java Styleに合わせたい
開発者はstyleの理解をしましたが、フォーマッタも自動化しないと漏れの可能性があります。
google-java-formatを適用すれば便利です。

##google-java-formatとは
>google-java-format is a program that reformats Java source code to comply wi

元記事を表示

Java + Apache Batik で SVG のパスデータ (path 要素の d 属性) を描画する

## 概要

– Apache Batik の Parser モジュールで SVG のパスデータ (path 要素の d 属性) フォーマットを解析して Shape オブジェクトを生成して描画処理をする

## Apache Batik の Parser モジュール

Apache Batik の Parser モジュールは SVG を解析できる。
ただ、ドキュメントには Parser モジュールは一般的な開発には使うことを想定していないと書かれている (そのわりにはドキュメントがそれなりにちゃんと書かれている)。

[Architecture overview](https://xmlgraphics.apache.org/batik/using/architecture.html)

> Finally, the Low level modules are used internally by the core modules to accomplish their work. These modules are not typically used by developers d

元記事を表示

【Java】Spring Boot 基本からHello Worldまで

#Springとは
Java開発におけるフレームワーク(=効率化tool)
ex:DBにアクセスするクラスなど

###Springの全体図
![spring.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282755/25851496-afb4-b1de-be10-3c718333c3dc.png)

##SpringBoot(≒スプリングフレームワーク)
* Springフレームワークがベース(もともとJavaのフレームワーク)
* 複数のライブラリの集合体。ビジネス系のApp作るために必要なものを網羅している
* Spring MVC
* Spring JDBC
* Spring Security
* Spring Data (JPA)
* 複数のフレームワークを使用する際に設定をXMLでゴリゴリ書かなくても簡単に設定できるのがSpring Boot

##Spring DI
* DI :Dependency Injection(依存性の注入)
* Spring

元記事を表示

CloudFirestoreの簡単な使い方(Android)

##はじめに
CloudFirestoreのAndroidでの基本的な使い方をメモ。
(導入から簡単なデータの送信受信など。)
使用言語はJava、開発環境はAndroidStudioを使用しています。
初投稿なので見にくい点が多々あると思いますがご了承を。
##Firestoreについて
FirestoreはNoSQLデータベースです。
ファイル構造は画像の通りです。
コレクション内にドキュメントが入っていてその中のデータを使います。
ドキュメント内にサブコレクションを作成することも可能です。
![structure-data.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/686889/4a5dbf95-be00-ebfc-36e7-4f1fb87593b2.png)

##プロジェクトの作成、準備
[Firebase](https://console.firebase.google.com/u/2/)のホームページから使ってみるを押しプロジェクトを作成をクリックし、手順に沿って作成していく。
アプリ

元記事を表示

期間の重複チェック(LocalTime, LocalDate, LocalDateTime)

毎回ロジックを考えている気がするのでメモしておく。

– 期間の終了がnull (つまり開始からこの先ずっと対象期間) というパターンもよくあるので、それにも対応。
– 「10:00 ~ 11:00」と「11:00 ~ 12:00」のような、期間1の終了と期間2の開始がぴったり一致している時も重複あり判定にしている。このパターンを重複なし判定にする場合は、 `!start2.isAfter(end1)` を `start2.isBefore(end1)`に、 `!end2.isBefore(start1)` を `end2.isAfter(start1)` にする。

“`scala
/**
* 期間の重複チェック(LocalTime版)
* 単一のポイントで期間が重なったときも重複したとみなす。
* e.g.)
* 期間1 => 10:00 ~ 11:00
* 期間2 => 11:00 ~ 12:00
* 結果 => 重複あり(true)
*
* @param start1 期間1の開始
* @param end1

元記事を表示

Javaで、前後の連続する改行やタブを取り除く

追記
1文字だとマッチしないことに気づき
`”^[\t\n]*([^\t\n]+(.|\\s)*[^\t\n]+)[\t\n]*$”`から
`”^[\t\n]*([^\t\n]*(.|\\s)*[^\t\n]+)[\t\n]*$”`に修正した。
最初のプラスがアスタリスクになった。

————————————

大嫌いな正規表現。
前後以外の改行やタブはそのままにするとこがポイント。
めちゃくちゃハマったので記事にしときます。

“`java

public static String trimNewline(String str) {
String regex = “^[\t\n]*([^\t\n]*(.|\\s)*[^\t\n]+)[\t\n]*$”;
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(str);
if (m.find()) {
return m.gro

元記事を表示

【Java】joinメソッドの使い方

#プログラミング勉強日記
2020年10月23日
Javaで文字列を連結するときに便利なjoinメソッドを使ったので、まとめる。

#joinメソッドとは
 指定された区切り文字で、文字列を連結するためのメソッド。第一引数を区切り文字(デリミタ)として、第二引数を接頭辞として以降指定された接頭辞の終わりまでの文字列が区切られる。
 デリミタは`,`(カンマ)、`.`(ピリオド)、`:`(コロン)、を指定することができる。

“`java:例
public class Main {
public static void main(String[] args) throws Exception {
String str = String.join(“,”, “apple”, “orange”, “melon”);
System.out.println(str);
}
}
“`

“`:実行結果
apple,orange,melon
“`

元記事を表示

if文の中括弧の省略(Javaシルバー)

# if文の中括弧の省略
Javaの制御文(if、for、while等)の中括弧は省略しても実行される場合がある。
{}が省略されている場合は、true時の処理対象が1行のみである。

以下の例①のコードでは、条件式(i < 3)の結果がtrueの場合、実行される文は処理1の文のみである。 処理2の文は条件式に関わらず必ず実行される。 ```java:例① if(i < 3) System.out.println("処理1"); System.out.println("処理2"); ``` つまり、例①は以下の例②のコードと同じ動きになる。 ```java:例② if(i < 3){ System.out.println("処理1"); } System.out.println("処理2"); ``` 今回、Javaの資格試験にでる可能性があったためメモした。 しかし、文法的には問題ないが可読性と保守性は下がるため、基本的には省略せず、例②のようなブロック{}の形にする。

元記事を表示

MyBatisでMapperに引数を経由せずにオブジェクトを渡す方法

記事投稿時点で見つけきらなかったので調べてみました。

# やりたかったこと
* フィーチャートグルの状態で発行するSQLを一部変更したい
* でも、フィーチャートグルを使うかどうかはマッパー内部に閉じたい(引数にしたくない)

# 結論だけみたい人へ

[サンプル](https://github.com/e-yamane/MyBatisImplicitParameter)はこちらにあります。
[このソースコード](https://github.com/e-yamane/MyBatisImplicitParameter/blob/main/src/main/java/mybatis_implicit_parameter/config/CustomSqlSessionConfig.java)の66行目のaddParameterメソッドを書き換えて渡したいオブジェクトを指定すれば引数で渡したのと同様の方法でアクセスできるようになります。

# コードの説明

## 全体像

まずは該当のソースコードを以下に示します。

ソースコード

<

元記事を表示

【備忘録】業務用Andoridアプリ開発への挑戦

#前提情報

## 挨拶
乱筆乱文にて失礼いたします
業務改善のためAndroidアプリの開発に挑戦することに
開発手順を検討しつつ進める所存
都合により細部をぼかすことがあるはご容赦いただきたし
内容は随時追加予定

## 選定経緯
– 紙に記入→PCへ入力の業務が非常に多く
データ化されていない情報も多い
– PC台数が少なく調べものもままならない
– ネットワーク環境が弱いためオフラインでも使える
___→Androidでアプリ開発が最適では___

***
## 投稿者スペック
– システム管理者3年目(2020/10現在)
– Android使用経験なし
– Java経験なし

## 環境確認
– Windows10 Pro + Java7
– Android Studio 4.0
– サーバー + SQL Server + Tomcat7
– Androidタブレット(Android 9 Pie)

# 開発手順

## 要件定義
– ターゲット補足
– 理想形の構築
– 現状の確認
– すり合わせ

## Androidアプリ
– [プロジェクト作

元記事を表示

備忘録No.2「ArrayListとHashSetで検索履歴を作る」[Java]

#はじめに
paizaのスキルチェック入門編で苦戦したので記録。

#やりたい事
1.任意の文字数の文字列を複数入力し、リストに持たせる。
2.その際、入力した文字列がすでにリストに存在していたら、以前の文字列を削除し、新しく追加する。
3.一番新しく入力されたものから順に上から出力する。

#コード1

Scanner sc = new Scanner(System.in);
List words = new ArrayList<>();
while(sc.hasNext()) {
String s = sc.nextLine();
if(words.contains(s)) {//すでにリストにあるか調べ、存在していたら削除する
words.remove(s);
}
words.add(0, s);//入力された文字列をリストの先頭に加える
}

for(Str

元記事を表示

[day: 5]Javaの基本をまとめました

# Javaの基本をまとめました
Javaの基本構文を確認できるチートシートとして作成しました。
## 出力
“`java
System.out.println(“Hello World”);

//文字列と数値を一緒に出力すると数値は文字列に自動変換される
Ststem.out.println(“私は” + 20 + “歳です”);
//私は20歳ですが出力される
“`

## コメントアウト
“`java
// コメントアウト
“`

## データ型
文字列や整数などの型をデータ型という
文字列: String
整数: int

## 変数
### 変数の定義

“`java
//データ型変数名の順番で宣言する
String name;

//変数に値を代入する
name = “佐藤”;

//佐藤が出力される
System.out.println(name);
“`

### 変数の初期化
変数の定義と代入は同時に行うことができる。

“`java
//Stringのデータ型で変数名nameに佐藤の値を代入
String name = “佐藤”;

//佐藤が出力

元記事を表示

【Java】ExecutorServiceで特定の処理を別スレッドで実行する【無限ループを回避】

# はじめに
Javaで特定の処理を別スレッドで実行するサンプルです。
とある処理で無限ループが発生した際(指定時間内に処理が終了しなかった際)処理を中断し、エラーを発生させるということをする必要があったのでその時の備忘録となります。

# サンプル

“`main.java

package main;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;

public class Main {

public static void main(Stri

元記事を表示

【Java】Listにデータを追加する方法(add,addAll)

#プログラミング勉強日記
2020年10月22日
addAllの使い方がいまいち理解できてなかったのでListにデータを追加する方法まとめる。

#値を追加するaddの使い方
 addメソッドは値を追加することができる。Listの末尾や位置を決めて挿入することができる。

“`java:末尾に追加
List list = new ArrayList();
// integer型のListの末尾に値1を追加
list.add(1);
“`
 挿入位置を決める場合は、2つの引数を指定する。第1引数は挿入する場所を、第2引数は挿入する値を指定する。

“`java:挿入位置を決める
List list = new ArrayList();
list.add(1);
list.add(3);
list.add(4);
// Listの1と3の間に2を入れる
list.add(1,,2);
“`

#値をまとめて追加できるaddAllの使い方
 addAllは複数の値をまとめて追加することのできるメソッド。

元記事を表示

【Java】オーバーライドとオーバーロードってなに

今一つアウトプットの勘所というのがわかりませんが、まぁ備忘録替わりです。
書き方云々で悩むよりはよいでしょうということであまり考えずにやっていきましょう。

IT系(?)新卒一年目、学生時代にコンピュータ系の経験なしという死海に投げ込まれたナメクジのようなもんです。
JavaSE11Silverとりたくて黒本やってるのですが、個人的躓きポイントとしてあるのがオーバーライドとオーバーロードというものです。紛らわしい。名前つけた人はそうとは思わなかったんでしょうか。思わなかったでしょうな。人の心がない。大体6文字あって4文字同じなのですから多数決で言えば同じでしょう。

*以下の記述は精密性、正確性ともにかけているであろうざっくりメモです。信じてはなりません。

端的に
【オーバーライド】
・スーパークラスで定義されているメソッドをサブクラスでも使えるように再定義したもの。
ちなみに、スーパークラスは継承された側でサブクラスは継承した側のクラスです。
・オーバーライドされた側、した側について、戻り値、メソッド名、引数が同じが同じでなければならない。
・アクセス制限レベル(publicとかp

元記事を表示

OTHERカテゴリの最新記事