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

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

JavaからExcelを簡単に出力!縦横変換不要なライブラリ「JXLS」はじめに

Apache POIをそのまま使うのがしんどいので、いいものはないかと探していたところ、Jxlsがよさげでした。
何が良いかって、ツリー構造を持ったデータを簡単に出力できる点が素晴らしいですね。
ただ、探したところ日本語ドキュメントが少なそうだったので、翻訳してみました。
変なところあればご指摘いただけると幸いです。

本記事は[こちら](http://jxls.sourceforge.net/index.html)の翻訳記事です。2019/3/30版のドキュメントを翻訳しています。

# イントロダクション
JXLSはExcel帳票を簡単に生成するための小規模なJava製ライブラリです。JXLSで出力する帳票のフォーマットやデータのレイアウトは、独自の構文をExcelテンプレートに書き込むことで定義します。
いわゆる帳票機能のようなJavaアプリケーションにとって、Excel生成は必要不可欠なものとなっています。

Javaにはオープンソース、商用ともに、非常に優れたExcelファイル出力用のライブラリが存在します。そのうちオープンソースのものでは、Apache POIやJava

元記事を表示

【Java】「final変数」と「不変オブジェクト」の違い

どーも、ふぎとです。
今回はfinal変数と不変オブジェクトについて
まとめてみました。

##final変数
final変数とは、final修飾子を指定した変数のこと。
その性質は「変更不可・読み込み専用」と呼ばれる
が、厳密には「**再代入不可の変数**」。

~~~ruby:
final int i = 3;
i = 5; //再代入によるコンパイルエラー
~~~
上では、基本型(int型)変数iにfinalを指定している。
基本型変数は、変数の値に「値そのもの」が保持される
変数だ(詳細は『[基本型変数の代入と参照型変数の代入
の違い](https://qiita.com/FugitHora812/items/a0e2f49331be6f35b8a0)』を参照)。そのため、「値そのもの」を入れ替
える再代入はコンパイルエラーになる。つまり、基本型
変数に限って言えば、final変数は「変更不可」である
ように見える。
話をややこしくしているのは、final指定の参照型変数だ。

~~~ruby:
final StringBuilder sb = new

元記事を表示

Android 11で令和に標準で対応予定

Androidのバージョンはグングン上がります。
今やそろそろAndroid 11がリリースされつつあります。
そのAndroid 11にて、ついに日本の元号「令和」が標準APIで対応するようです。

# 結論

結論を真っ先に述べます。

– Android 11(R)にて、ついに日本の元号「令和」が標準APIで対応するようです。
– すでにAPIレベル24からAndroid標準APIはICUを取り込んでいます。
– でもAPIレベル24~29の間は「令和」には対応していません。「平成」どまりです。

# [閑話]コードネームとかAPIレベルとか

ところで、お菓子の名前のコードネームですが、「Q」からやんなくなりました。

KitKatとかLollipopとかMarshmallowとかNougatとかOreoとかPieとか。時折、登録商標も混ざりながらも。
Androidっ子たちは、「Q」から綴りが始まるお菓子が何になるのかワクワクしてたのに、Googleが「お菓子の名前はもうやめた」と言い出して。

Android 10は「Q」。そろそろリリースされる11は「R」です。

And

元記事を表示

Java 8のOptionalをSwiftと比較する

# 概要

本記事では[OptionalのApple公式ドキュメント](https://developer.apple.com/documentation/swift/optional)の概要に掲載されている項目を元にして、Swiftの`Optional`型とJava 8の`Optional`型を比較します。若干今更感のある内容にはなりますが個人的な備忘録も兼ねて投稿に至りました。
なお本記事に掲載してあるスニペットは多少簡略化されているので、そのままコピペしても動かないものがあります。ご了承ください。

# Nil結合演算子(Nil-Coalescing Operator)

### Swift

中身があるならそれを、なければ指定したデフォルト値を返すように`Optinal`をアンラップします。`??`という演算子を使います。複数の`Optional`型をオペランドとしてつなぐこともできます。

“`swift:Swift
let wrappedValue: String? = nil
let defaultValue = “default”
let value = wrapp

元記事を表示

配列初期化時のエラー?

### 配列初期化時のエラー?

今回の現象:String配列を一回宣言してから初期化しようとしたらエラー

“`java:
String[] strList={“1″,”2″,”3″,”4”};
“`
これができるならこれは…

“`java:
String[] strList;
strList={“1″,”2″,”3″,”4”};
“`

こんな感じで初期化できると思いきや…
Array constants can only be used in initializers

じゃあこれは…

“`java:
String[] strList;
strList=new String[4];
strList[0] = “1”;
strList[1] = “2”;
strList[2] = “3”;
strList[3] = “4”;
“`

成功!!

でも長ったらしいので不満…

ということで調べると
http://d.hatena.ne.jp/Kappuccino/20080721/1216623546

こういう書き方あるのか…

“`

元記事を表示

Javaアプリケーションでは、Word(DOC/DOCX)ドキュメントをPDFに変換します

Spire.Docの助けのもとで、私達は簡単にword文書をPDFとして保存できます。この文はWord(.doc..docx)をPDFとして保存する方法を以下の3つの方面から紹介します。

  • Word文書をPDFに直接Javaアプリケーションで変換する
  • Word文書をPDFファイルに暗号化されたパスワードで変換結果ファイル
  • 画像の品質を設定するときにWord文書

Word文書をPDFに直接Javaアプリケーションで変換する

“`java

import com.spire.doc.*;
public class toPDF {
public static void main(String[] args) {
String inputFile=”data/convertedTemplate.docx”;
String outputFile=”output/toPDF.pdf”;
//サンプルドキュメントの読み込み
Docume

元記事を表示

これだけでOK WebSocket: Server=Java, Client=Java,JavaScript

Java製のWebSocket Serverに対し、
複数のJava WebSocket Client と JavaScript WebSocket Client が接続し、
クライアントからのメッセージは各クライアントに対してブロードキャストされるものと想定します。

# 動作確認済 Runtime

1. Local Server : Tomcat 8.5
2. Azure WebApp Service (Tomcat 9.0)

# Server : Java

“`java
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import javax.websocket.EndpointConfig;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.webs

元記事を表示

【Java】基本型変数の代入と参照型変数の代入の違い

どーも、ふぎとです。
今回も自身の復習を兼ねての投稿です。

##「変数への代入」
「変数への代入」とは、変数に何かしらの値をセット
すること。

##「基本型変数」への代入
基本型変数とは、「値そのものを保持する変数」のこと。
例えば、int型の変数numberに3を代入すると、numberが
保持する値は3になる。

~~~ruby:

int number = 3; //整数3をnumberに代入
~~~

##「参照型変数」への代入
参照型変数とは、「コンピュータのメモリ上に確保された
ある領域(オブジェクト)への参照(オブジェクトの場所
を示す位置情報)を保持する変数」のこと。

~~~ruby:

String word = “Qiita”; //変数wordに文字列”Qiita”を代入?
~~~
上の例では、String型の変数wordに文字列”Qiita”が代入され
ているように見える。言い換えると、変数wordが保持する値
は文字列”Qiita”であるように見える。
しかし実際には、変数wordが保持している値は「String型オブ
ジェクトへの参照」である。つまり、

元記事を表示

Java EE(Jakarta EE)で「私はロボットではありません」を作る

# 0.環境

### 今回のこの記事を書いた環境
OS…Windows 10
IDE…Eclipse 2020-3
Java…Open JDK 14
サーブレットコンテナ…Apache Tomcat 9.0.33

# 1.reCAPTCHAを作成する
###
まずreCAPTCHAのサイトにアクセスします。
[reCAPTCHA](rhttps://www.google.com/recaptcha/)

+ボタンで作成。

自分のサイトの情報を入力していきます。

![SS1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/607960/b65f27d3-cec4-0416-8fb7-6d908b02be51.png)

ラベルにはわかりやすい名前を入力します。

reCAPTCHA タイプは、「私はロボットではありません」をやりたいのでreCAPTCHA v2を選択。
すると、「私はロボットではありません」チェックボックスというのが出てきますので選択されていることを確認します。

元記事を表示

一対多によるリレーション

自分用の備忘録も兼ねて実装にあたり苦労したので投稿します。

#概要
* レストラン(親)は複数のメニュー(子)を持つ関係
* Java、SpringBootにて一対多によるリレーションを関係するエンティティに記述
* 親テーブル(@OneToMany)、子テーブル(@ManyToOne)使用

#親テーブル

“`RestaurantsEntity.java
@Entity
@Table(name=”restaurants”)
public class RestaurantsEntity {

//各フィールド変数記述 略……

@OneToMany(mappedBy=”restaurantId”)
private List restaurantMenuEntityList;

//下記setter/getter 略……

}
“`
「一対多」の一側のフィールドには、多側のエンティティのコレクションを保持させてます(private List<RestaurantMenuEntity> restaurantMenu

元記事を表示

Javaのデザインパターン

# 目次

1. デザインパターンの説明 
1. Facadeパターン
2. Strategyパターン
3. デザインパターンまとめ
4. 参考文献

– – –

# デザインパターン(概要)

– GoFという頭のいい人が考えた全23パターン
– 対象はオブジェクト指向言語
– 他にもいくつかの種類がある
– Javaの機能を活用して(主に)拡張性の向上を図っている
– 継承
– ポリモーフィズム
– カプセル化など
– 優秀なベテランはこう考えている!という考え方集
– 具体的な実装方法ではない
– 考え方を理解して自分のプログラムに応用


#デザインパターン(効果的な使い方)

– 考え方を応用して自分のソースに反映する
– ≠パターンに合わせて実装する
– 効果が期待できる場合のみ使う
– ≠可能な限り適用する
– ≠デザインパターンの効力を妄信する
– 無理に使うと逆効果
– 状況に合わせて柔軟に適用判断する
– ≠設計時に適用判断をしたのでプログラムに絶対に反映する

元記事を表示

==演算子とeqalsメソッドの違い

どーも、ふぎとです。

今回はちょっとした備忘録。
##==演算子とequalsメソッドとはどう違うのか?
結論を言うと、

「**==演算子は同一性を判定し、
equalsメソッドは同一性及び同値性を判定する**」

という違いがあるそう。

#「同一性の判定」とは
「同じインスタンスであるか否か」ということ。

#「同値性の判定」とは
「インスタンスに格納されている値が同じであ
るか否か」ということ。

例を以下に示します。
##サンプルプログラム

~~~ruby:
public class Example{
public static void main(String[] args){
String s1 = “012”;
String s2 = new StringBuilder(“012”).toString();

if(s1 == s2){
System.out.println(“true”);
}else{
System.out.println(

元記事を表示

ファッ⁉ enumってなんや?

どーも、ふぎとです。

最近はオブジェクト指向の学習を進める日々・・・。
進めるうち、classでもinterfaceでもない、
enumなる型に遭遇。

調べてみると「列挙型」というものだそう。

##列挙型?
列挙型はclassでもinterfaceでもない、「第3のクラス宣言」。
特徴は、**宣言と同時にその型のインスタンスが生成される**
ということ。そしてそれ以降、その型のインスタンスは生
成できず、宣言時に作られたインスタンスしか使えない。
この「間違った値を使えない性質」を「**型の安全性が保証
されている**」という(らしい)。

~~~ruby:
public enum Language{
JAPANESE,
ENGLISH,
CHINESE
}
~~~
↑宣言した時点で、Language型のインスタンス”JAPANESE”,
“ENGLISH”,”CHINESE”が作成される。どんな天才でもこれ
以降Language型のインスタンスを新たに作ることはできない

##使い方
列挙型のインスタンスを使うときは、”(型名).(列挙子=インスタンス名

元記事を表示

java配列

### 宣言
長さ指定は必須

“`java
int[] a; // 初期化しない
int[] a = new int[5]; // 0で初期化
int[][] a = new int[2][3]; // 二次元配列
“`

### 初期化
初期化しない時、初期値0

“`java
int[] a = {1, 2, 3}; // 長さ3
int[][] a = {{1,2},{3,4}}; // 二次元の初期化
f(new int[]{1, 2, 3}); // 関数の引数として by @saka1029
“`

### 長さ
– 属性。関数ではない。
– 長さは変更不可。

“`java
a.length
a[0].length // 二次元の場合
“`

### 代入
– 添え字 0 始まり
– 最大添え字は length – 1
– 超えると「java.lang.ArrayIndexOutOfBoundsException」例外投げられる
– java.util.Arrays.fill(配列, 値) 指定値で配列全体を埋める
– java.util.Arrays.

元記事を表示

AzurePipelinesでMavenプロジェクトのCI

以下の記事の続きで、今回はAzurePipelinesを使ってみます。
https://qiita.com/kasa_le/items/b152f91a61315a2b12b2

# Azure Pipelines
言わずとしれた、MicrosoftのクラウドサービスAzureの中の、Azure DevOpsに含まれるCIになります。
https://azure.microsoft.com/ja-jp/services/devops/

## 特徴
Azure Repos(AzureのGitリポジトリサービス)だけでなく、Githubや汎用Gitとも接続できます(※)。
当然、.NETやC#のプロジェクトのビルド環境が充実していて、Windows開発者は、実質AppVeyorかこちらかの二者択一でしょうね。もっとも、少し前まではAppVeyorしかなかったので、選択肢ができたことは良いことではないでしょうか。
Visual StudioやVisual Studio Codeとの連携やExtensionが充実しているのも流石です。

※ただし、SSH公開鍵方式での接続には非対応で、かつ、

元記事を表示

Springのapplication.propertiesでシステム環境変数を扱う

# はじめに
Spring(Boot)でアプリを作成する際にシステム環境変数から値を取得したい場合がある。
メモ書きも兼ねて取得方法を紹介する。

# どんな時にシステム環境変数を使うか

例えばDBに接続したい場合、`application.properties`には以下のような設定をする必要がある。

“`application.properties
### DB接続設定値 ###
spring.datasource.url=<データベースのURL>
spring.datasource.username=<ユーザー名>
spring.datasource.password=<パスワード>
“`

こういった場合、各設定値をシステム環境変数から取得するようにしておけば、以下のようなメリットが考えられる。

①__環境ごとに設定ファイルを作成する必要が無くなる。__
環境変数を前もって設定しておくか、実行時に設定するようにすれば、同じ設定ファイルを他の環境でも利用することが出来る。
各環境ごとの設定ファイル(例えば、`application-devXX.properties`)を複

元記事を表示

AWS Lambda で Javaを使う ー実装編 – EC2を止める/立ち上げる

##やりたいこと
Lambdaで実行するJavaでEC2を起動・停止する
(↓をJavaで書いてみて、ちょっとだけカスタマイズする。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/)

##目次
・[Eclipse準備編](https://qiita.com/t_ookubo/items/a71a9bd05282bf20e023)
・登録実行編(次回以降)
・実装編 – EC2を止める/立ち上げる(今回)
・実装編 – CloudWatchの引数を確認する

## とりあえずクラス作成
前回Eclipseでサンプルクラスを作成できるようにしたので、
それを使って、入力タイプ「Custom」のLambdaプロジェクトを作る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/559813/eb8e09b1-5ac5-5d43-68eb-4c694cff8ea3.png

元記事を表示

JavaアプリをDockerイメージにするならjibを使うと便利だよ

##メリットの多いDocker
コンテナ化技術の一つであるDockerですが、使ってみると数多くのメリットがあります。
実際のメリットについてはネットで検索すると色々出てくるので、この記事ではDockerそのものに関する解説はいたしません。
ただ個人的に強調しておきたいのは、本番環境などへ直接Javaのモジュールやアーカイブなどを配置するようなデプロイしている場合、Dockerイメージをリポジトリにpushするという作業に変えることでたくさんの恩恵を得ることができると思います。

##Dockerの面倒さ
メリットの多いDockerですが面倒な面もあります。
Dockerfileを書かないといけない。書くためのコマンドやベストプラクティスも学習するとなるとそれなりに面倒です。
ローカル開発環境がWindowsの場合にDocker環境を構築するのも面倒です。

##jibが解決
もしDockerコンテナ上で動くアプリケーションがJavaで開発されている場合、Googleが提供している[jib](https://github.com/GoogleContainerTools/jib)を利用

元記事を表示

【Java】日付から差分を算出したい

開始日付、終了日付をもとに処理時間を算出したかった。

“`java:date.java
import java.text.SimpleDateFormat;
import java.util.Date;

public class date {

public static void main(String[] args) {

SimpleDateFormat sdf = new SimpleDateFormat(“yyyy/MM/dd HH:mm:ss”);
Date start = null;
Date end = null;

// Date型に変換
try {
start = sdf.parse(“2020/03/23 12:30:12”);
end = sdf.parse(“2020/03/23 12:31:12”);
} catch (java.text.ParseException e) {
e.printStackTrace();
}

long timeStart = start.getTime();
lo

元記事を表示

spring-batchでメタデータとstepで異なるTransactionManagerを使う

spring-batchで2つ以上のデータソースを使う場合、step定義作成時に“`StepBuilderHelper#transactionManager“`でトランザクションマネージャを指定する。

以下は設定例。

“`java
import java.util.stream.Collectors;
import java.util.stream.IntStream;

import javax.sql.DataSource;

import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframe

元記事を表示

OTHERカテゴリの最新記事