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

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

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

こんなのを作ります.

Thymeleafでヘッダーフッターを共通化する方法

# 概要
Spring BootとThymeleafを使って作るWebアプリで、各htmlのページに共通しているヘッダーやフッターを共通化する方法

## 環境
– Java8
– Spring Boot
– version: 2.1.9.RELEASE
– Thymeleaf
– version: 3.0.11.RELEASE
– Eclipse
– version: 2018-09 (4.9.0)

# サンプル
## ディレクトリ構成
Java側は省略しますが、templateと静的コンテンツの配置はこんな感じ。

“`plaintext:dir
src/main/resources
├── static
│   ├── css
│   │   ├── common.css
│   │   └── top.css
│   └── js
│      └── datepicker.js
└── templates
├── common.html
└── index.html
“`
SpringBootは`templates`配下のHTMLからCSSやJS

元記事を表示

Java(Wicket-Spring boot)で作ったシステムを学内サーバにデプロイする方法

# Javaシステムのデプロイ方法を書きました

ぜひ、なにか修正すべき箇所があればご指摘お願いいたします。
自分自身、経験が浅いため、知見がほしいです。:bow_tone1:

[こちらのgithubにあります。](https://github.com/hatsuki0111/JavaDeploy/blob/master/%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4.md)

元記事を表示

Elasticsearch 7.0から、OpenJDKがバンドルされるようになっていたという話

# TL;DR

* Elasticsearchは、7.0からOpenJDKをバンドルするようになっている
* バンドルされているOpenJDKは、AdoptOpenJDKの模様
* デフォルトでは、バンドルされているOpenJDKで起動する
* 変更したい場合は、`JAVA_HOME`を設定する

ちなみに、**LogstashにはOpenJDKがバンドルされていません**。

# ドキュメントとリリースノート

CentOSに`yum`でElasticsearchをインストールした時に、インストールしたパッケージ内部で持っているJDKで起動しているのに、ふと気づきました。

ドキュメントを読んでみると、どうやらOpenJDKをバンドルしているようです。

[Install Elasticsearch with RPM](https://www.elastic.co/guide/en/elasticsearch/reference/7.5/rpm.html)

> Elasticsearch includes a bundled version of OpenJDK from th

元記事を表示

Codecademy 何?

# 初めに
この記事は、SLP KBIT Advent Calendar 2019 の13日目の記事です。

プログラミングを自分でやってみたいときこのウェブサイトは役に立つかもしれない。
#どうして Codecademy❓
良い点
○ たくさん言語を学ぶことができる
○ 説明が詳しい
○ シラバスに沿って勉強する
悪い点
○ 日本語に翻訳しなければならない
○ 無料ではない
#やってみよう
1.言語を選択する
![Capture.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549495/df380ea5-981b-0df3-216a-ab3f2fefe3aa.jpeg)
![Capture2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/549495/c1ec0253-872f-352b-8733-f43acc7dc3db.jpeg)
2.説明を読む
![Capture5.JPG](https://qiita-im

元記事を表示

ジェネリクスと関数型インターフェースを活用した便利メソッドの作り方

# 便利メソッドの作成
多人数でチームを組んで開発を行っていると共通で行いたい処理などがでてきます。
例えば文字列操作や日付操作などは色々なシーンで使われますが、その際には便利なライブラリを利用したり、便利なメソッドが集まったクラスなどを作成したりするかと思います。

特定のクラスに対する処理であればある程度簡単に作れてしまいますが、多人数で開発する場合には様々なクラスに対して共通の処理を行いたいといった要望がでてきます。

その際に利用すると便利なものが「ジェネリクス」や「関数型インターフェース」といったものです。
この2つについてはなんとなく知っていても実際にどう使っていいかわかりにくという人もいるかと思います。

そこで今回は実際に便利メソッドを作る工程を追いながら実際にどのように使うのかを紹介してみたいと思います。
※ 作りながら雰囲気をつかんでもらうため「ジェネリクス」や「関数型インターフェース」の紹介は軽めです

## ジェネリクス (総称型) とは

データ型の定義に対してパラメータのように渡すことで、同じような構造をもつプログラムを複数のデータ型に対応できるようにした

元記事を表示

Tomcatサーバーの構成を公開できませんでした。

#自己紹介
みなさん初めまして。**Falchan**と申します!
今年の4月から未経験からJavaの学習を始めてるバチバチの初心者です(^^♪
4月からやってるというもの、壁に当たりすぎて実質1,2ヶ月分の学習しか出来ていない気がしますが(~_~;)
そんなことはさておき、今更ながらアウトプットもかねて自分と同じ未経験の方の力になれたらと思い記事を書かせていただきます。
どこか間違いがあったり、ご意見、アドバイスなどがありましたらコメントしていただけると幸いです。
いいねも頂けると嬉しいです(小声)
前置きが長くなってしまいましたが本題へ…

Javaを使用してWebアプリケーションを作成し、実行の際に発生したエラーです。

#実行環境
– 【Spring Tool Suite 4】
Version: 4.4.2.RELEASE
– Apache-Tomcat Version: 9.0.27
– JRE Java8

実行環境を書く理由はそれぞれのソフトの互換性があるため、バージョンが違うだけでうまく実行できないという状況が発生します。
なので、「上記に記載しているソフト、バージ

元記事を表示

Android Java FragmentでCameraXライブラリ使ってみた

Google I/O 2019で紹介されたCameraXをJavaでFragment上で試してみたので簡単にご紹介。

##準備

公式の[チュートリアル](https://codelabs.developers.google.com/codelabs/camerax-getting-started/#0)をみながら進めていくと楽チンなのでこちらを見ながら進めていきます。

プロジェクト作成や、dependenciesの追加などはチュートリアル通りに進めるだけなので本記事では割愛。

##プレビュー用のビューを追加
Fragmentで表示するlayout.xmlにTextureViewを追加します。

“`xml

元記事を表示

LaravelとSpringBootでDIコンテナを利用してみる

# はじめに
これは[ユアマイスターAdventCalendar2019の13日目](https://qiita.com/advent-calendar/2019/yourmystar)の記事です。
(社会人になってから学んだことをアウトプットする記事になります。)

## 今回の経緯
社会人になってからDI(依存性の注入)という概念を知りました。
WEBサービスの開発を行う際に、フレームワークを利用する場面は多々ありましたが、主に利用していた`Cake PHP`ではDIという概念は出ていなかったと記憶しています。
(記憶違いだったらすみません。)

DIは、インスタンスをnewで作成して利用するのではなく、DIコンテナやサービスコンテナ呼ばれるもの(SpringBootではDIコンテナ、Laravelではサービスコンテナと呼ばれます)を利用して、あらかじめ登録されたインスタンスを利用します。

今回は、業務で利用しているSpringBootでのDIコンテナの利用、最近独学で学んでいるLaravelでのサービスコンテナを利用してみるというテーマで記事を書いてみたいと思います。

##

元記事を表示

日付と時刻

個人的な勉強のためにまとめたものです

#日付と時刻

Java SE 8から日付や時刻を扱うための新しいAPIが追加された

##クラス

###LocalDate

**日付**を管理するクラス

###LocalTime

**タイムゾーンなし時刻**を管理するクラス
時間は、ナノ秒の精度まで表すことができる

###DateTimeFormatter

指定した**日付パターン**に変更するクラス
「事前定義されている標準フォーマッター」、「ローカル固有のフォーマッター」、「カスタムパターンを使ったフォーマッター」の3種類がある(より複雑なフォーマッターは**DateTimeFormatterBuilder**によって提供)

###Duration

**時刻の差**を管理するクラス

###Period

**日付の差**を管理するクラス

###ZonedDateTime

**タイムゾーンあり時刻**を管理するクラス

##メソッド

###ofメソッド

日付けを指定してインスタンス生成するときに使うメソッド

###nowメソッド

現在の時刻でインスタンス

元記事を表示

Alibaba Java Coding Guidelinesについて

##はじめに
初めてQuiitaにブログを書く機会が現れたので、ここに来ました!
現在、自分の技術武器は二つがあります、JavaとAlibaba Cloud。そしてこの二つを組み合わせ、何か書きたかったです。
色々がありますが、今回Alibaba Java Coding Guidelinesについてちょっと紹介したいと思います。
何で?自分のコードもっとキレイにしたいですから!

###Alibaba Java Coding Guidelinesとは?
長年にわたるAlibabaの技術チーム内部のベストプログラミングプラクティス。
様々なJavaプログラミングチームが同じルールに則ってプログラミングすることにより、コードクオリティーを高め、お互いのプログラムの再利用と理解を促進しているものです。

このGuidelineは、他のプログラマーも利用できるよう[GitHub](https://github.com/alibaba/p3c?spm=a2c65.11461447.0.0.5d19d1cdpnXlEo)で公開されており、現在2万弱の★がついています。また、アップデートされ続けてい

元記事を表示

【Java】OS依存な標準ライブラリを挙げてみる

# はじめに
この記事は[Java Advent Calendar 2019](https://qiita.com/advent-calendar/2019/java)の13日目の記事です。13日の金曜日です。不吉ですね。

不吉といえば、OS依存ってなんか不吉な感じがしませんか?
たとえばWindows環境で動作確認を行った時は問題なかったけど、Linux環境で動かしたらエラーになった…なんてことがあったりします。Write once, run anywhereなJavaですが、OSごとの違いを考慮しなくていいわけではありません。
そこでこの記事では、Javaの標準ライブラリでOS依存が隠れている例をいくつか紹介してみます。

## この記事における「OS依存」
一口にOS依存といっても色々なことが考えられますが、この記事ではプログラムの実行結果がOSによって変わってしまう場合のことを「OS依存」と表現することにします。
内部的にOSネイティブなAPIを呼ぶメソッドはたくさんありそうですが、どのOSでも同じ実行結果になるのであれば、この記事においてはOS依存ではないと考えます。

#

元記事を表示

Selenideを用いてブラウザ自動操作環境を5分で作成してみる

#はじめに
この記事は[エムスリーキャリア Advent Calendar 2019 13日目の記事です。](https://qiita.com/advent-calendar/2019/m3c)
この記事ではSelenium WebDriverのラッパーである[Selenide](https://selenide.org/index.html)を使ってブラウザ操作をサクッと試してみます。

#対象読者
– とりあえずブラウザの自動操作を試してみたい人
– JavaでUIテストを書いてみたい人
– ブラウザ操作を行うツールを作成したい人

#開発環境の準備
それではまず開発環境の準備から始めていきます。
IDEにはeclispeを使用します。
[https://mergedoc.osdn.jp/](https://mergedoc.osdn.jp/)よりJava Full Editionをダウンロードし、任意の場所に解凍します。
![eclipse.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/

元記事を表示

授業で習ったJavaの復習をつらつらと part4

# はじめに
今回扱うもの

– メソッド
– 継承
– インターフェース

前回の「コンストラクタ」同様、オブジェクト指向に関する場所なので分かりづらい。例を挙げながらつらつらと記述していく。part3までは読んでね。
今回の部分まで理解できると違う言語でもプログラミングしやすくなり、とても便利な考え方です。がんばりましょう。

# メソッド

ここではオブジェクト指向で超重要な部分、メソッドについてお話する。
メソッドとは、自分が作成したオブジェクトに対して「どんな挙動をするか」を記述する部分である。「ノートPC」というオブジェクトを作った場合、コンストラクタでは「誰の」や「色」、「ハード構成」のような物体そのものに対して記述していく。対して**メソッドは「起動する」「ネットワークにつなぐ」「ファイルを圧縮する」のような行動・状態遷移を定義**できる。

“`java/Car.java
public class Car
{
int number;
String owner;
int speed;

public Car()
{

元記事を表示

OTHERカテゴリの最新記事