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

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

macOS に jenvをインストール、設定する

2020/01/25時点で他のQiita記事が古くてちゃんと動作しない&公式ドキュメントと違うので記述

# 前提

## 環境
macOS Mojave 10.14.6で確認

# ~/.jenv を作成する

“`
mkdir ~/.jenv
“`

# jenvのインストール

## 1. homebrewを利用する場合

“`
brew install jenv
“`

## 2. git からcloneする場合

“`
git clone https://github.com/jenv/jenv.git ~/.jenv
“`

### 2-1. bash

“`
echo ‘export PATH=”$HOME/.jenv/bin:$PATH”‘ >> ~/.bash_profile
echo ‘eval “$(jenv init -)”‘ >> ~/.bash_profile
“`

### 2-2. zsh

“`
echo ‘export PATH=”$HOME/.jenv/bin:$PATH”‘ >> ~/.zshrc
echo ‘eval

元記事を表示

Java勉強始めたてによる二次元配列

自分用メモ
##参考にはなりませんよぉ~
####Javaに触れつつ持ち合わせてる知識だけで二次元配列を考えてみる
今回は5行5列の二次元配列に1~5のランダムな数字をぶち込んで表示させた

やったこと
二次元配列の宣言
    ↓
1~5のランダムな要素を代入  
    ↓
改行しつつ表示させるのを5回繰り返す
みたいな

“`java

package sample;

public class sample {

public static void main(String[] args) {

String sep = System.lineSeparator();

int x = 6;
int y = 6;

int[][] array = new int [x][y];

for(int i = 1; i < x; i++){ for(int j = 1; j < y; j++){ array[i][j] = new java.util.Random().nextInt(5)+1; System.out.pri

元記事を表示

Javaのequalsは結構気持ち悪い

#導入
こんにちは、けちょんです。
**Java書いてますか?**
そんな私はここ数か月コーディングしてません。
焦ってJava goldの勉強を始めました(今日から)
その際気持ち悪かったことがあったので紹介します。

#なにが気持ち悪かったか
皆さん、文字列を比較する際、どう比較しますか?

##素人プログラマの場合
“`
String str1 = “test”;
String str2 = “test”;
if (str1 == str2) {
System.out.print(“same”);
} else {
System.out.print(“diff”);
}
“`
はい、だめですね。
こんなコード書いたら怒られます。はい、私です。
演算子である”==”はオブジェクトのメモリアドレスを比較します。

異なるオブジェクトは基本的に異なるメモリアドレスを保持します。
今回比較したいのはオブジェクトの持つ文字列であるため、意図に反しています。

**が、この場合は”same”が出力されます。**
String自体が気持ち悪いため、注意が必要です。
本題ではないし、詳し

元記事を表示

Java14でdata class的な機能が追加されるらしい

JavaでフィールドとコンストラクタとGetter(場合によってはSetter,equals,toString)しか持たないクラスを書いたことがある人は多いと思います.そのようなクラスはデータクラスと呼ばれれています.
場合によっては似たようなクラスを大量に書かなければならないといけず,いくらIDEのメソッド生成機能を使っても煩わしいことこの上ないですよね.
lombokを使うと多少は軽減されるが,IDEの設定などをしないといけない場合も多く,面倒であることは変わりません.

そんな中,この問題を解決するような機能がJava14で追加されるらしい.

## Java14の新機能

Java14では`Record`なるものが導入されます.
https://blogs.oracle.com/javamagazine/records-come-to-java

使い方は,データクラスにしたいクラスを`class`ではなく`record`と宣言するらしい.

### 使用例
使用前

“`FXOrderClassc.java
public final class FXOrderClassic

元記事を表示

SendGrid Javaライブラリの、メール配信失敗時の実装を確認した話

## 前置き
JavaでWebアプリケーションを作成しています。
システムからメール配信を行うため、[SendGrid](https://sendgrid.kke.co.jp/)を利用しているのですが、なんらかの原因でメール配信が失敗した場合に、想定していた後処理がコケていたので備忘録として記載します。
~~すべては前任者の「エラー時にもResponseで結果を返してくるだろう」という思い込みから発生した実装でした。~~

## SendGridを使用してメール配信処理を作成
build.gradleに[SendGrid Javaライブラリ](https://github.com/sendgrid/sendgrid-java)をプロジェクトにインストールしメール送信メソッドを作成。
SendGridが400番台のエラーを返してくる場合はこちらから送ったリクエストパラメータの不備やリクエスト超過のためリトライは行わず、ログを残してフロント側にエラー情報を返して処理を終了します。
500番台の場合はSendGridサーバにエラーが発生している状態のため、2〜3度リトライを行うように作成し

元記事を表示

DBUnitの空文字列とか日付とか使いづらいので直して使う

## 1. はじめに
Java+RDBMSの開発プロジェクトで、単体テストツールにDBUnitを使用するケースは未だ(2020年)に多いと思います。
DBUnitはDBの初期データと実行後のアサーションデータをxls形式やCSV形式を利用できることで非常に便利かつ開発省力化に有効なツールですが、Excelのデータ形式やPOIの仕様の問題で若干使いづらい点があります。

具体的には件名で挙げた通り、可変文字列型(VARCHAR型)の空文字列とNULLを分別できない点と、日付型(DATETIME、TIMESTAMP、DATE、TIME等)の値を正確に設定できない問題があります。

本稿では、この対策方法を記述します。
なお、本稿でのDbUnitのバージョンは2.5.4を使用しています。

## 2. DBUnitはどうなっているのか?
### 2.1 セル情報の読み込み
DBUnitでは`XlsTable`クラスの`getValue(int row, String column)`メソッドで、Excelのセルの値を取得してDBに設定する値に変換しています。

“`java:XlsTabl

元記事を表示

libGDXでandroidアプリのチューニングをした話

##はじめに
もう9年前。iOSアプリが日本ランキングの1位になった。
[iOSソリティアV](http://itunes.apple.com/jp/app/soritiav/id341532096?mt=8)
さりげなく自慢:relaxed:

調子に乗ってandroidアプリも作った。nativeで作った。
nativeで当時android2.xなので、SurfaceViewを使った。
[androidソリティアV](https://play.google.com/store/apps/details?id=jp.co.projapan.solitaire)

アニメがいまいちだったけど:sob:、ちゃんとできた。
フレームレートがちょっと低かった。

android/iOS共に現在10周年記念中。

数年前、チューニングしたいな、と思った。
iOSとソース一本化
したいけど、一本化するにはやることが多すぎる・・・。

うーん、GLSerfaceViewとかか。めんどくさそうだぞ。しかもよくなるか保証がない。

そんなとき、こんな記事が
[Android StudioでlibGDX

元記事を表示

Java備忘 LocalDateを使ってみた

##はじめに
Javaで○日以上古いファイルを検出するというプログラムを書く機会があったので、備忘として残しておく。

##LocalDateを使う
Dateでも可能だが、より新しいLocalDateを使ってみる。

“`java
Long lastModified = targetFile.lastModified();
LocalDate lastDate = Instant.ofEpochMilli(lastModified).atZone(ZoneId.systemDefault()).toLocalDate();
“`
これでファイルクラスで宣言した対象のファイルから最終更新日を取得する。
エポック時間をLocalDate型に変換しているイメージ。

“`java
LocalDate daysBefore = LocalDate.now().minusDays(5);
“`
LocalDateクラスのnow()で本日の日付を取得する。
今回は5日前の日付を対象にするとして、minusDays(5)で取得することができる。

“`java
if(lastMo

元記事を表示

Eclipse JavaからSQLファイルに飛ぶ(ジャンプ)方法

# Eclipse java DomaSQLでJavaからSQLファイルに飛ぶ方法
SQLファイルとリンクしている関数を右クリック > Doma > Jump To Sqlファイル

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384142/41cfb2c7-905e-9a50-d256-724b37223928.png)

メニューに出ない場合はDomaToolがインストールされていない可能性あり。
以下に手順を示す。

# DomaToolのインストール
1. ヘルプ > 新規ソフトウェアのインストール
2. `http://eclipse.seasar.org/updates/3.5/` > 追加
3. `Doma`にチェックし、次へ
4. インストールを完了する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384142/222fe2b4-d376-2ec3-1615-c3398

元記事を表示

Azure EventhubsにSASトークンを使う方法(Java)

# はじめに

こんにちは、とがりと申します。
SREをしています。

# なぜ書いたか

Azure Eventhubsを使っていて調べても全然ドキュメント出てこなく、詰まったから。
本記事はJavaの環境が既に用意されている人を対象にしております。(maven, gradle, etc.)

# 本題

### やりたいこと

######アンドロイドアプリからAzure Eventhubsにデータを送信
Shared Access Signature 用いてEventhubsにアクセスしたい。[1](https://docs.microsoft.com/ja-jp/azure/event-hubs/authenticate-shared-access-signature)
しかし、SASを持っていればEventhubsに対して半永久的にアクセスすることができてしまうため
クライアントサイドに配置するのはセキュリティの観点で不安である。
何かいい方法がないかと探していたところSasからTokenを生成できるという情報を得た。
なのでSasTokenを用いてEventhubsにデータ

元記事を表示

アルゴリズム 体操18

#Reverse k Elements
単一リンクリストと整数「k」が引数として渡されます。リストのk要素ずつ反転させるアルゴリズム体操。
k <= 1の場合、リストは変更されません。k >= n(nはリンクリストの長さ)の場合、リンクリスト全体を逆にします。

##例
以下は、k = 3で、3要素ごとに反転した例です。
![Screen Shot 2020-01-23 at 9.51.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/6e6d8cbe-00ad-b2bd-3a57-d0efffdf6ecf.png)
以下は、k = 4で、4要素ごとに反転した例です。
![Screen Shot 2020-01-23 at 9.51.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/93ab81a9-c111-effc-9f0b-6a5ab257c679.png)

##Solution

元記事を表示

ArrayListのnewとclear()では挙動が異なる

地味にハマってしまったので。

# はじめに
Javaでリストを扱う時、よくArrayListをnewして使うと思います。

“`hoge.java
List list = new ArrayList<>();
“`

そのArrayListを使い回したいという時にGoogle先生に聞いてみると、

1. newする
2. ArrayList.clear()メソッドを使う

の2通りをオススメされると思います。そして、両者の違いについては特に触れられず、強いて言えば「実行速度が違うよ」と言っていくらかQiitaの記事がヒットすると思います。

しかし、実際のところは速度だけではなく、挙動にも異なる点があります。

# newとclear()の違い
1次元リストから要素を2つずつ取り出して2次元リストを作る場合を想定します。

以下にサンプルコードを示します。
まずはnewした場合からです。

“`sample.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Lis

元記事を表示

匿名クラス(stream api 導入を目指して)

## 目的
stream apiを学ぶ上では匿名クラスの設計及び実装の考え方の理解が不可欠だと感じた.
メソッド参照,関数型インターフェース,ラムダ式,ジェネリクスを用いた設計(インスタンススコープ及びメソッドスコープ,PECS原則に基づいた設計)学習前の入口となる匿名内部クラスについて学ぶ.

## 入れ子クラス

ブロック({})内で宣言されたクラスを「入れ子クラス」(Nasted Class)と呼ぶ
>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497973/ceed2433-13b0-7da7-bf5a-be46fe12a583.png) 入れ子クラスのイメージ図.

“`NastedClazzSample.java
public class NastedClazzSample {
static class StaticClazz {} //static member class

class MemberClazz {} //menber class

元記事を表示

Android StudioでJavaのversionで躓いたのでまとめる

# はじめに

ここ数ヶ月、実務インターンをするようになってから、インターン先が変わるたびに環境構築をしているのですが、適当にやっているせいでJDKのバージョンが原因なエラーに幾度となく躓いてきました。

毎回調べて、

ああ…JDKのversionが原因か。で、どうするんだっけ。と調べるのが不毛なため備忘録として記事にしました。

この記事は自分のユースケースにおける対処法なため、他の方には当てはまらないかもしれませんが、随時updateしていければと思います。

# 躓いた具体的なユースケース

まず、

“`Powershell
% java -vesion
“`

とターミナルで打つと、ご自身のJDKのバージョンがいくつか確認できるのでご参考までに。

## How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

この時の自分のJDKは

“`Powershell
java 12.0.2 2019-07-16
“`

でした。

> Java 9で「モジュール」の機能が

元記事を表示

[java] HttpURLConnection POST

##使い方
以下の通りである。

~~~java
try {
//コネクション
URL url = new URL(“URL”);
httpURLConnection_ = (HttpURLConnection) url.openConnection();
httpURLConnection_.setDoOutput(true); //POST可能にする
httpURLConnection_.connect();

//送信したいデータ
String param = “param1=1”;

//リクエストボディに送信したいデータを書き込む
OutputStream os = httpURLConnection_.getOutputStream();
BufferedWriter writer = new BufferedWrite

元記事を表示

Jerjey(Jax-rs)でmultipart/form-dataの受け取り

##はじめに
[[Android]端末からサーバへ画像のアップロード](https://qiita.com/hire1105/items/b5a8681405d9f437f759)にて受け取る側がServletになっていました。本当はJerjeyで受け取りたかったのですが、勝手がわからず妥協していました。今回その方法がなんとなくわかったので紹介させていただきます。

###環境
* Eclipse 4.13.0
* java 11
* Jerjey 2.29
* 入れ方は[こちら](https://qiita.com/hire1105/items/3cc5c70727ea68bff83a)

##multipart/form-dataを対応させる

以下をダウンロードしてください。

* [jersey-media-multipart.jar](https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart)
* [mimepull.jar](https://mvnreposit

元記事を表示

spring-batchでreaderの値に応じてwriterを動的に切り替える

たとえば、readerが整数を読み込み、偶数・奇数で異なるwriterを呼び出す、という例を考える。

“`java
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.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.ItemWriter;
im

元記事を表示

JConsoleがlocalで接続できないとき

知りたい情報をドストレートに射抜いてくれる日本語記事は検索しても出てこなかったので記します。

**解決の助けになった記事(英語)**
https://community.oracle.com/thread/1177644
#現象
jconsoleなるJavaのプロセスを監視するものを使う必要が生じたので、常駐してるJavaプロセスにローカルでアクセスしにいったところ、4つあるうち1つのプロセスだけアクセスできなかった。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/571578/54dcb4a7-3ac9-f892-2ce0-7a9f640a2d2f.png)
ローカルなのになんで失敗するの?接続が成功しませんでした?

#対処法
目的の*jar*ファイルに監視するオプションを付与してあげるとJconsoleで監視できるようになった。
例)コマンドプロンプトでJMXで監視するオプションを付与して実行する。

“`console:コマンド(win10)
java -Dcom.sun.ma

元記事を表示

Java基本文法メモ

## 変数と定数
#### **宣言**

“`java

/* 変数宣言 */
boolean varA; // boolean型/宣言のみ
varA = true; // 代入のみ
byte varB; // 8bit(-128~127)
short varC; // 16bit(-32768~32767)
int varD; // 32bit(約-21億~約 21億)
long varE; // 64bit(なんかいっぱい)
float varF; // 32bit浮動小数点数
double varG; // 64bit浮動小数点数
char varH; // 16ビットUnicode文字
String varI // 文字列型(参照型)

/* 定数宣言 */
static final data_type varJ = valA; // static + final修飾子

“`

## 配列

#### **固定長配列**
“`java
/* 宣言 */
data_typeA[] arrayA = new data_typeA[index_max_value];
dat

元記事を表示

アルゴリズム 体操17

#Rotate a Linked List

##説明
単一リンクリストのヘッドノードと整数 nを指定すると、リンクリストを n回転させるアルゴリズム体操。

以下、2つの例があります。引数として渡されたリンクリストと整数 n = 2回転後の出力です。

n の値は、リンクリストの長さよりも大きくなる可能性があることに注意してください。
![Screen Shot 2020-01-22 at 5.20.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/f0730925-38e5-32db-c8b8-cd6a51a0576f.png)

n = -2の時、
![Screen Shot 2020-01-22 at 5.20.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/405022/e5303455-94e7-6413-30ef-289a348ef097.png)

##Solution
### Ru

元記事を表示

OTHERカテゴリの最新記事