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

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

JDK 14 の新機能 JEP 358: Helpful NullPointerExceptions を試した

`-XX:+ShowCodeDetailsInExceptionMessages` を追加する必要がある。

“`java
import static org.assertj.core.api.Assertions.assertThat;

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;

import org.junit.Test;

public class NPETest {
public String maybeNull = null;

@Test
public void testNpe() {
// Preconditions
final RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
assertThat(runtimeMXBean.getSpecVersion()).isEqual

元記事を表示

コンストラクタのオーバーロード

#コンストラクタのオーバーロード

~~~java

//オーバーロード

class Id {
private String name = ” “;
private int age = 0;

public Id() {
}

public Id(String n, int a) {
name = n;
age = a;
}

public Id(String n) {
name = n;

}

public Id(int a) {
age = a;

}

public void show() {
System.out.println(“name:” + name);
System.out.println(“age:” + age);
System.out.println(“———————-“);
}

}

class Sample2 {
public static void main(String[] args) {
Id id1

元記事を表示

メソッドのオーバーロード

#メソッドのオーバーロード

~~~java

//オーバーロード

class Id {
private String name;
private int age;

public void set(String n, int a) {

name = n;
age = a;
System.out.println(“name:” + name);
System.out.println(“age:” + age);
System.out.println(“———————-“);
}

public void set(String n) {
name = n;
System.out.println(“name:” + name);
System.out.println(“———————-“);
}

public void set(int a) {
age = a;
System.out.println(“age:” + age);
System.ou

元記事を表示

フォースダークを支える技術でダークテーマ用colors.xmlを生成する

## TD;DL
– Android #2 アドベントカレンダーの15日目の記事です。
– 下記レポジトリのスクリプトを実行すると生成できます。
https://github.com/sdsd08013/dark_color_gen

– layoutのcolor指定方法に強く依存するので基本的にはこれだけでダークテーマ対応が済むことはありません。

## はじめに
Android10から導入された機能にフォースダークというものがある。開発者向けオプションにあるフォースダークのオーバーライドという項目がそれにあたり、このオプションをONにした状態で既存のアプリを起動すると比較的高いクオリティでダークテーマを適用する技術である。この記事ではフォースダークを支える技術を利用して既存のcolors.xmlからダークテーマ用のcolors.xmlを生成する。

## フォースダークを支える技術

#### Lab色空間
Lab色空間はCIE1931色空間をベースとして定義された色空間で明度を示す次元Lと補色a*bにより表される。開発時に利用されることで馴染みがあるRGB色空間と比べると次元Lが

元記事を表示

【Java】【Stream API】オレオレCollectorによるヘッダ・明細Bean生成で学ぶ独自Collectorの実装方法

この記事は、[Java Advent Calendar 2019](https://qiita.com/advent-calendar/2019/java) 16日目の記事です。
※この記事のソースはJava11を前提にしています。

2014年にリリースされたJava8より、`Stream API`が追加されて、関数型言語のパラダイムが入り、「その気になれば」モダンなプログラミングスタイルでコレクションを扱うことができるようになりました。

Java8リリース当時、`Stream API`もラムダ式も禁止だとか話題になったことがあったような気もしますが、現在はどうでしょうか:sweat_smile:

Java8のリリースから5年経ち、ここ数年で私の関わるエンタープライズな現場で`Stream API`を導入していると、終端操作で`Stream#collect(toList())`で`List`にした後に、ゴニョゴニョしていたり、`Stream#forEach`のラムダ式が数十行もある実装を見かけ、それが至るところに存在しているなんてこともあったので、独自にCollecto

元記事を表示

Exceptionをもみ消すなってどうせえちゅうねんって話

Javaアドベントカレンダー14日目になります。

相変わらず、ブログからの転載になります。

~~若干時間オーバーです、ごめんなさい、時差的にこちらではセーフなので許してください。~~
うそやんけ、僕の担当14日でした。
今日15日・・・圧倒的遅刻・・・・ごめんなさい!!!!

そういえば、最近開発者コミュニティに入りました。
初学者が多めのコミュニティのようですが、それでも勉強になることが多く、参加してよかったなと感じています。

主にSlackで活動しているようです。

海外からでも参加できるため、非常にありがたいです。
僕は現地語がまだ喋れないので、現地の開発者コミュニティにはまだ参加できていないんですよね。。。。

さて、というわけで、今回は初学者向けのエラーハンドリングの記事を書いていきたいと思います。

基本的にはJavaで書かれていますが、他の言語でも参考になることはあるかと思いますので、初学者で**もみ消すな**に手をコマネいている方はぜひ読

元記事を表示

IntelliJ IDEAのプロファイラを使ってみた

GMOアドマーケティングのT.Oです。

IntelliJ IDEA Ultimateでプロファイラを使ってみましたので利用手順についてご紹介します。
お手軽に使用できます:grinning:

●前提
開発環境としてmac版のIntelliJ IDEA Ultimate 2019.3を利用します。
注1) IntelliJのプロファイラはUltimate版のみで使用可能です
注2) 現時点ではプロファイラの機能はtomcatなどのアプリケーションサーバーには使えません

# 1.プロファイラ機能の有効化
IntelliJのメニューから「Preference→Build,Execution,Deployment→Profilers→Java Profiler」を選択します。「+」ボタンを押して「CPU Profiler」, 「Allocation Profiler」を追加します。
profiler_p1.pngJavaでExcelデータの取り込み

#はじめに
今回はApachePOIです。
Javaの処理の中にExcelで作られたデータ群を取り込む為に使いました。

##ApachePOIとは
正式名称ApachePOI
WordやExcelといったMicrosoft Office形式のファイルを読み書きできるJavaライブラリ
※Wiki参照
https://ja.wikipedia.org/wiki/Apache_POI

ここから以下のjarファイルをダウンロードしました。
https://poi.apache.org/download.html

poi-4.1.1.jar
poi-ooxml-4.1.1.jar
poi-ooxml-schemas-4.1.1.jar
commons-collections4-4.4.jar
commons-compress-1.19.jar
xmlbeans-3.1.0.jar

##作った処理
対象のExcelファイルの1シート目、A列をJavaに取り込む処理を作ってみました。

“`SamplePOI.java
public class SamplePOI {

元記事を表示

特定の日付との差が何年何か月かを表示

社内システムである特定の日付と現在の日付との差を何年何か月で表示する必要があったので、調べてみた。

– Java

あまり使ってこなかった java.time を使用。
今回は時間までは必要ないため、LocalDateTimeではなく、LocalDateを使用。

“`Java
LocalDate sampleDate = LocalDate.parse(“2019/12/09”, DateTimeFormatter.ofPattern(“yyyy/MM/dd”));
LocalDate currentDate = LocalDate.now();
// 特定の日付と本日の差を年形式で取得
//long year = ChronoUnit.YEARS.between(sampleDate , currentDate);
// 特定の日付と本日の差を月形式で取得 ※間違い。トータル月数が取得される
//long month = ChronoUnit.MONTHS.between(sampleDate , currentDate);

// コメントいただいた方法で修正
Period

元記事を表示

サーバクライアントなアプリを作成してみる

## このページについて

学習目的で、サーバクライアント式のスマートフォンアプリケーションを組んでみました。
本記事は、実装に当たって参考にしたサイトをまとめたリファレンス記事となります。
1画面、1GetAPIですが、やることは沢山あり大変勉強になりました。

***
【全体図】
![ぷれぜんてーしょん1概要図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385780/96b2181e-22d6-456f-9e13-d3769ea76c2f.png)

***
## 開発環境を準備する

***
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/385780/d1f2d41c-ee4c-afb3-be61-a97a7b724e4b.png) 
Server開発環境はいつも使っているEclipse。特にコメントなし。

* [GitHubとEclipseの連携とかまとめ](https://qiita.c

元記事を表示

フォームへSLEEP値を入力してタイムアウトをテストするアプリ

##はじめに
Webフォームへ値を入力し送信ボタンを押すと、その秒数SLEEPして応答を返すという単純なJavaのサンプルコードです。タイムアウト値をテストする際に使ったものです。
##サーブレット配置
“`text:servlet
servlet
 +WEB-INF
 | +classes
 | | +RequestSample1.class
 | +web.xml
 +formsample.html
“`
##formsample.html

“`html:formsample.html




sleep_sample

sleep_sample

元記事を表示

Androidアプリ開発で国民の祝日を表示させるのに試行錯誤。前編

 どうも!ヨースケです。日記アプリもようやく1画面が終わったので、約10時間に及ぶ日帰りミニ旅をしていました。一眼レフでたくさん撮るぞーと意気込んでいましたが、ほとんど撮れませんでした…ただ疲れただけで、帰り道に前方後方不注意の車に二度轢かれかけるなどさんざんな一日でした(笑)。
 
 今回は日記アプリに取り入れたその日が国民の祝日ならば表示しタップするとその詳細をダイアログで表示する。というのを前編後編にわたって紹介します。

– 国民の祝日
– 日付が固定されている祝日
– 第〇月曜日の祝日
– 春分と秋分
– 振替休日

### 国民の祝日
 まず、日本にある国民の休日を記してみます。
**元日、成人の日、建国記念の日、天皇誕生日、春分の日、昭和の日、憲法記念日、みどりの日、こどもの日、海の日、山の日、敬老の日、秋分の日、スポーツの日、文化の日、勤労感謝の日**の16個あります。「体育の日」は2020年に「スポーツの日」と改められました。次はプログラムで重要になる日付の話をします。

### 日付が固定されている祝日
 プログラム的には楽な日付が初めから決められている祝日の一

元記事を表示

Redmine REST APIでハマったこと

# 背景
今年 `Redmine REST API` を使って下記のようなことをする機会がありました。

* 進捗管理をExcelからRedmineにmigration
* CIのリグレッションテストでFailしたテストケースをRedmineに自動起票

# 目的
今まで `Redmine REST API` は使ったことがなく、実装しながら学んでいきました。その中でハマったことを中心に皆さんに共有して、僕のはハマった罠を回避して頂きたいと思います。

# 前提
* javaをそこそこ理解している
* Redmineの機能をそこそこ理解している

# 環境
“`cl:Redmine Version
Environment:
Redmine version 3.4.6.stable
“`

“`cl:java Version
java version “1.8.0_221”
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit

元記事を表示

Catalinaにjavaをインストールできない場合

#javaをmacにインストールできない、、
macを買い替えたので、新たにjavaをインストールしようとしたときに問題が起こりました。
MacのOSはCatalina(10.15.1)です。

“`
brew cask install java
“`
このスクリプトを実行してバージョンを確認しようとしたところ思わぬエラーが、、
スクリーンショット 2019-12-15 12.47.08.png
MacのOSがcatalinaになってからこのようなエラーが出ている人がちらほらいるみたいです。
##解決策
解決策としては、oracle公式のインストーラを使ってインストールすることで事なきを得ました。
[oracle公式](https://maysatsuki.com/mac/jdk/90)にあるインストーラ(<

元記事を表示

Javaのenumにabstractなメソッドを定義してそれぞれの振る舞いを書く

# 概要

このエントリでは、Javaのenumにabstractなメソッドを定義してそれぞれの振る舞いを書くことについて取り扱います。
(EffectiveJava 3rd editionに書いてあるやつ、だいたいそのまんまです。自分でやってみた内容についてメモしておきます。)

# Javaのenum

Javaのenumでは、値だけでなくメソッドを定義することができます。

値だけ定義したパターン

“`Java
enum Operator {
PLUS, SUBTRACT, MULTIPLY, DIVIDE, NONE
}
“`

これに対し、値ごとにメソッドを定義し、下図のような書き方をすることができます。

“`Java
enum Operator {
PLUS {
@Override
BigDecimal apply(@NonNull BigDecimal lhs, @NonNull BigDecimal rhs) {
return

元記事を表示

可変長引数

個人的な勉強のためまとめました

##可変長引数

・引数の数を自由に変更できる引数
・**引数の型の直後**に**ピリオドを3つ**「**…**」つけて宣言
・理論上は引数をいくつでも渡しても呼び出すことができる
・渡された複数の値は、JVMによって配列に置き換えられる。そのため、値を使うときは配列と同じように「**[]**」を使う

###2つの注意点

①同じ型の数が可変な引数をまとめられるだけで、**異なる型はまとめられない**
②可変長引数以外の引数を受け取る必要がある場合、可変長引数は**最後**の引数にすること

①は、可変長引数が配列に置き換えられていることを考えれば当然
②は、例えば次のようなメソッドの宣言では、どこまでが第一引数で、どこからが第二引数かわからず、コンパイルエラーになる

例)可変長引数を最初に記述したメソッド(コンパイルエラー)

“`sample.java
void sample(int… num,int value) {
//do something
}
“`

次のように順番を入れ替えるとコンパイルエラーが発生しない

例)可変長

元記事を表示

ArrayList

個人的な勉強のためまとめました

##ArrayList

何らかの集合のことを**コレクション**と呼び、配列もそのうちの一つである
Javaには、もっと簡単にコレクションを扱うために、**コレクションAPI**や**コレクション・フレーム**と呼ばれる複数のインターフェイスや、クラスで構成されるクラス群がある
これらのインターフェイスやクラスの多くはjava.utilパッケージに配置されており、**java.util.ArrayListクラス**は**動的配列**とも呼ばれ、配列のように使える

###ArrayListクラスの特徴

①オブジェクトであればどのような型でも使える
②必要に応じて要素数を自動的に増やす
③追加した順に並ぶ
④nullも値として追加できる
⑤重複した値も追加できる
⑥スレッドセーフではない

①、②の特徴は、配列の問題点をカバーするもの
③は配列のように値を番号で管理するため、追加した順に値が並ぶ**リスト構造**である。ただし、任意の場所に挿入することもできる
⑥は並行処理したときに意図しない結果になることを防ぐ機能がついているかどうか
 ※スレッド

元記事を表示

JavaでExpression Problemを解決する方法

#Expression Problemとは

>静的型付き言語で、再コンパイルなしで、新しいデータ型を追加したり、新しい関数を追加できるようにするにはどうしたらよいか

という問題である。
何も考えずにクラスを設計すると、
1. データ構造は追加しやすいが操作が追加しにくい
2. 操作は追加しやすいがデータ構造は追加しにくい
のどちらかになりやすい。
データ構造も操作も追加すくするにはどうしたらいいか、というのがExpression Problemの問題意識である。

#Javaでの解決方法
HaskellやOCamlやScalaなどで高度な言語機能を用いた解法が既に有名(?)だが、Javaの言語機能でも同様にExpression Problemが解決できることを示す。

1. サブタイピング+戻り値の共変性を使う方法
2. サブタイピング+Genericsを使う方法

上記2種類の方法が存在する。この記事では2の方法を紹介する。

##例題
まずは単純なインタプリタを例にして考え

元記事を表示

漏れのある抽象化の法則 – False Sharing

[テックタッチアドベントカレンダー](https://qiita.com/advent-calendar/2019/techtouch)14日目を担当する@ihirokyです。
13日目は @oyoshikeita による 言葉を使ってプロダクトに生命を吹き込む でした。
何気なく眺めているプロダクトがなぜこんなデザインになっているのかが垣間見れて「あーなるほど」と納得してしまいました。自分は何となくに頼りがちな部分がありますが、デザインするにあたりしっかり考えた裏付けをもちプロダクト開発に当たっていきたいです。

さて、テックタッチエンジニア勢の記事はTypeScript/Goが大勢を占めていますが、ネタが無いので心機一転Javaを使ったハードウェアを考えるお話です。6日目の話は忘れました。

今回作成したものは https://github.com/ihiroky/false-sharing に置いてあります。

# 漏れのある抽象化の法則
私の胸にぶっ刺さっている言葉の一つに、Stackoverflowでお馴染みの Joel Spolsky 氏の名言「漏れのある抽象化の法則」と

元記事を表示

Processingで作った作品を,Processingで作ったプレゼンスライドで動かす

# はじめに
Processingで作った作品を,Processingで作ったプレゼンスライドに**そのまま**埋め込んでプレゼンしたくないですか?
本記事で実現したいと思います(需要があるのかは知らない).
ここでいう**「プレゼンスライド」**は,記事[Processingで作るプレゼンスライド][1]で作ったものを指します.
本記事を読む前にご一読ください.
[1]:https://qiita.com/ohayota/items/d79e0acb54f594eb2721

こんなのを作ります.

OTHERカテゴリの最新記事