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

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

Jackson で Java Enum 列挙型と JSON をシリアライズ・デシリアライズするサンプルコード

## 概要
– Java Enum 列挙型と JSON 内の値を相互変換する
– Jackson の提供する抽象クラス JsonSerializer と JsonDeserializer を使う

## 動作確認環境

– Java 11 (AdoptOpenJDK 11.0.6+10)
– Jackson Databind 2.10.3
– Gradle 6.2.1
– macOS Catalina

## サンプルコード

“`java
package com.example.humansex;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.dat

元記事を表示

【Spring】BeanUtils.copyPropertiesの落とし穴

# BeanUtils.copyProperties
Springには[BeanUtils.copyProperties](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/BeanUtils.html#copyProperties-java.lang.Object-java.lang.Object-)という便利なメソッドが用意されている。
一方のBeanからもう一方のBeanへ、同じ名前のフィールドの中身をコピーしてくれるメソッドだ。第一引数がコピー元、第二引数がコピー先になる。
クラスが別々だったとしても、同じフィールド名があればコピーは可能である。

**`Book` クラス**

“`java
public class Book {

String code;

String name;

int price;
}
“`

**使用例**

“`java

Book book1 = new Book();

book1

元記事を表示

初心者レベルでも気づく、JavaとGoのswitch文の記述の違い

# 基本的な`switch`文の記法

“`java:Java
switch rank {
case 1:
System.out.println(“金メダル!”);
break;
case 2:
System.out.println(“銀メダル!”);
break;
case 3:
System.out.println(“銅メダル!”);
break;
default:
System.out.println(“メダルを獲得できませんでした”);
break;
}
“`

“`go:Go
switch rank {
case 1:
println(“金メダル!”)
case 2:
println(“銀メダル!”)
case 3:
println(“銅メダル!”)
default:
println(“メダルを獲得できませんでした”)
}
“`

Javaの`switch`文の場合、暗黙的にfall-throughであ

元記事を表示

未経験エンジニアが覚えておきたい用語

概要

IT業界に飛び込んで約半年、いろいろな技術を勉強してきました。
ただ、これやったけどなんだっけという事が多くなったので、備忘録として基本的なことを書いていきます。

JAVA
——–
・オーバーライド
 →スーパークラスで定義されているメソッドをサブクラスで上書きする
・オーバーロード
 →引数や戻り値が異なるが名称が同一のメソッドを定義する
・ポリモフィズム
 →同じ操作でも扱う対象によって振る舞いが異なる仕組み
・継承
 →あるクラスを基に新しいクラスを定義する
・オブジェクト
 →クラスを複数定義しクラスから生成したオブジェクトを利用。
 【特徴】 再利用性が高い、仕様変更に強い
・抽象クラス
 →抽象メソッド1つ以上定義したクラス 
 【特徴】 abstractを指定、メソッドを定義できる、インスタンス化出来ない、実装は持たない
・カプセル化
 →publicやprivateなどのアクセス修飾子を適切に設定し、クラスに対するアクセス制限を行う
 【特徴】 クラスのアクセスが統一されるため、独立性が高まる、バグを未然に防げる、クラスの変更が簡単
・Array

元記事を表示

@Builder(Lombok)の使い方

#Lombokの@Builderアノテーションとは?
– JavaのClassに@Builderを付与することで、Builderメソッドを生成してくれる。
– 引数のながーいコンストラクターを用意しなくてすむ。

“`Java
import lombok.Builder;

//呼び出される側のJavaClass
@Builder
public class Employee {
private String name;
private int syainId;
private int age;
private String position;
private String status;
}
“`

“`Java
//Builderを呼び出す側
Employee employee = Employee.builder()
.name(“Kohei Sato”)
.syainId(101)
.age(32)
.position(“developper”)
.build();
“`

#初期値

元記事を表示

Android studio でのメモ

#Android studio
・テキストの編集
編集したいテキストをクリックし、画面右側のattributes内の項目から編集する。

##java
・値等を扱う場合、値の種類を明確にする必要があり、型に入れる必要がある。

| 型の名前 | サイズ | 値の範囲 |
|:–|:–|:–|
| byte | 1 バイト | -128 ~ 127 |
| short | 2 バイト | -32768 ~ 32767 |
| int | 4 バイト | -2147483648 ~ 2147483647 |
| long | 8 バイト | -9223372036854775808 ~ 9223372036854775807 |

入れる値が小さいからといって、積極的に byte や short を使う必要はない。
普通の整数には int、非常に大きな数になることがある場合には long、という程度の使い分けでいい。
更に、小数を扱う場合には、浮動小数点数を表す型を使う必要がある。

| 型の名前 | サイズ |
|:–|:–|
| float | 4 バイト |
| doubl

元記事を表示

SSHJ使用時のSLF4Jに関する警告メッセージを抑止する

## やりたいこと
SSHJを使用した時に出力される警告メッセージを抑止することです。

## 問題概要
SSHJのSSHClientクラスをnewした時に警告メッセージが出力されます。

## 問題詳細
SSHJのSSHClientクラスをnewした時に以下の警告メッセージが出力されます。

“`
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
“`

警告が出力されても、SSHJは問題なく使用できます。
たぶん、ログ出力ができないだけなのではないかと思います。

## 解決策
まずは素直に、警告メッセージに示されているサイトを参照します。
すると、

– “org.slf4j.impl.StaticLoggerB

元記事を表示

Gsonを使ってみた

#Gsonとは
そのまま[引用](https://github.com/google/gson)します。
>Gson
>Gson is a Java library that can be used to convert Java Objects into their JSON >representation. It can also be used to convert a JSON string to an equivalent Java object. >Gson can work with arbitrary Java objects including pre-existing objects that you do not have >source-code of.

>There are a few open-source projects that can convert Java objects to JSON. However, most of >them require that you place Java annotations in your classes

元記事を表示

初心者から始めるJava、if文・switch文

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#条件判断文
状況に応じた処理を行う場合、Javaでは**「条件(Condition)」**という考え方で処理の前提をとらえることになる。日常生活で使う条件と同じと考えていいが、Javaにおける「条件」は、**TrueかFalse**どちらかの値を持つものを指す。
条件判断文は、**「条件」の値に応じて処理を行う文**であり、条件の値を境に処理の内容を分けて用意することができる機能である。

  • if文
  • もし~であるならば(でないのなら)、〇〇する。
    そうでないならば(else)、△△する。

  • switch文
  • もし、〇〇の値が●●ならば、◎

元記事を表示

React Native vs. Ionic – A head-to-head Comparison in 2020

In this article, we are going to look at an intense comparison between Ionic and React Native development frameworks. At the end of this article, you will be all clear about what framework you should use for your development projects.

click here to read morehttps://www.positronx.io/react-native-vs-ionic-head-to-head-comparison/

元記事を表示

Javaのコレクション入門

[こちら](https://yk0807.com/techblog/2020/03/05/java%e3%81%ae%e3%82%b3%e3%83%ac%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e5%85%a5%e9%96%80%ef%bc%8b%ce%b1/)のブログ記事をQiitaに投稿したものです。

# 0.前置き
Javaに限らず、プログラミングではデータをまとめておくのに配列だけではどうにもうまくいかないことが多々あります。そこでデータ構造が重要になってくるのですが、そのあたりの表現方法は言語によって様々です。

C++ならvectorとかlistとか標準ライブラリのコンテナが用意されていて、(あまり経験ないけど)C#だとLINQというものを使うようです。PHPだと配列でかなりのことが出来たりします(その分使い方には慎重さを要する)。
Pythonだとリスト型やタプル、辞書などを用途に応じて使い分ける感じですね。

# 1.コレクションフレームワークとは
さて、Java。Javaでは、コレクションフレームワークというものを使います。コレクショ

元記事を表示

[Java8]streamを使ってint型の配列を降順ソートする

# 概要
– 勉強中にひっかかったところのメモ
– Integer型だと使えたけど、int型の降順だと、Comparatorが使えなかった。
– 結論は、boxedを使えばできるようだった。

# サンプルプログラム
– 「int型配列を使って、次の数字を降順に並び替えて出力しなさい」みたいな問題

“`java
import java.util.Arrays;
import java.util.Comparator;

public class Main {
public static void main(String[] args) throws Exception {

// 入力
int[] numArray = {4, 3, 2, 5, 6, 7, 3, 2, 1, 9, 7, 8, 10, 6, 4, 3, 5, 8, 9};

Arrays.stream(numArray)
.boxed()
.sorted(Comparator.rev

元記事を表示

Java6アプリからSSHJを使用してSSH接続する

## やりたいこと
Java6でコンパイルした自作アプリから別マシンに、[SSHJ](https://github.com/hierynomus/sshj)ライブラリを使用して、SSH接続することです。
以前は[JSch](http://www.jcraft.com/jsch/)ライブラリを使用して実現しようとしたのですが、[こちらの記事](https://qiita.com/sanoa/items/86c9e9efb5358601b25b)に書いたように上手くいかなかないので、JSchライブラリからSSHJライブラリに変更して実現しようとしています。

## 環境
### 接続先
– Ubuntu 16.04 LTS
– OpenSSH 7.2p2

### クライアント
– Windows 8.1
– 自作アプリ(Java6で開発)
– [SSHJ](https://github.com/hierynomus/sshj)

## サンプルコード
SSH接続時にパスワード認証を行うサンプルはたくさん見つかると思いますが、鍵認証(パスフレーズあり)を行うサンプルが少なかったように思えた

元記事を表示

【Java】配列

#配列
:sunny: 複数のデータをひとまとめにする。変数のセットのようなもの。

“`例.java
public class Main {
public static void main(String[] args) {
String fruit1 = “りんご”;
String fruit2 = “みかん”;
String fruit3 = “いちご”;
String fruit4 = “メロン”;
String fruit5 = “バナナ”;

System.out.println(fruit1);
System.out.println(fruit2);
System.out.println(fruit3);
System.out.println(fruit4);
System.out.println(fruit5);
}
}
“`

上記は果物の種類を表示していくプログラミングです。
これも間違いではないのですが、フルーツの種類を追加していくたびに
変数 fruit の数字が増えていき、

元記事を表示

ブラウザからの先読みリクエスト(Prefetch)はどうやって判定すべきか

# TL;DR
先読みリクエスト(プリフェッチ, Prefetch)はcssだけじゃなくて他のURLにも飛ぶケースがある。
特定のエンドポイントに対して、

– ユーザーのアクションに起因するGETリクエストの件数をより正確に知りたい
– 割と重い処理なので余計なリクエストはなるべく処理したくない

上記ニーズがある場合プリフェッチ対策をした方が良い。

# 経緯
あるWebシステムを開発中、テストサーバーに対してどう考えても意図しないGETリクエストがログに入ってきたため、原因について考えた。
調べたところ、ブラウザバーに何かを入力したりした時にブラウザが先読み(プリフェッチ)処理としてGETリクエストを飛ばすことがあるらしく、そのリクエストに関してはヘッダーに固有の値が設定されるため、それぞれのブラウザの仕様に対して検知処理を実装して対応した。

# 各ブラウザごとのプリフェッチを示すヘッダー

## Chrome(Chromium)
`Purpose: prefetch`
https://www.chromestatus.com/feature/624795967710822

元記事を表示

初心者から始めるJava、式と演算子 2

#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#演算子
前回は、加算と連結に使う+、代入に使う=を扱った。Javaの演算子はたくさんあるが、今回は代表的なものを扱う。以下リスト。

**1.乗算(*),除算(/),剰余(%)**
**2.等価(==)と不等価(!=)**
**3.インクリメント(++)とデクリメント(–)、またその前置後置**

#乗算・除算・剰余
Javaにおいて(僕が知るに少なくともPythonも)、乗算の場合に×でなく*を使う。除算は÷でなく/、そして剰余(余りの数を出す)は%を使う。

除算と剰余において、0で割ることは許されていない(0除算)。コンパイルの際にはエラーとして出てこないが、実行の

元記事を表示

【Data Base】busy状態が頻発したケーススタディ

#事象
初めての新規開発案件で、自分の製造した機能でbusy状態のエラーログが頻発してしまった。

##原因
調査の結果、原因は他機能同士でデッドロックが発生してしまうことに起因していた。

##調査方法
悲観ロックをかける順序を洗い出した。
例)昇格機能:対象の社員を確認 → 所属する店長グループを確定 → 配属エリアの選定 → 配属店舗の選定
       t_staff → t_maneger_group → t_area → t_shop
  退職機能:所属店舗の確認 → 対象社員の上長を確認 → 対象社員の削除
       t_shop → t_manger_group → t_staff

(無理に例えると分かりにくい気もするけど、せっかく書いたし残します。)

##対策
テーブルをidなどで管理して、ロックする順序をプロジェクト全体で統一するのが一般的だよね~との事。

###最後に。
ある程度、デッドロックが原因であることは当たりがついていたが、それを起こしている機能がなかなか見つからずに困り果てていた。
やむを得ず先輩に助力を求めたところ、あっさりと原因の機能を見つ

元記事を表示

AWS Lambda で Javaを使う ーEclipse準備編

##やりたいこと
AWS Lambdaで実行するJavaを実装する

##目次
・Eclipse準備編(今回)
・登録実行編(次回以降)
・実装編 – EC2を定時に止める/立ち上げる
・実装編 – CloudWatchの引数を確認する

## Eclipse準備編
まずは、開発環境を整える。
AWS Toolkit for Eclipseというのが準備されているので、それを利用する。
https://docs.aws.amazon.com/ja_jp/toolkit-for-eclipse/v1/user-guide/setup-install.html

↑に従うと
Eclipse→[Help] →[Install New Software] からインストールできるはずなのだけど、
ネットワークの問題なのかなんなのかうんともすんとも言わなかった。

ので、↓の「Drag and Drop Install」からインストールした。
https://marketplace.eclipse.org/marketplace-client-intro?mpc_install=907

とりあ

元記事を表示

モンティ・ホール問題の簡単な確認

# はじめに
モンティ・ホール問題とは――――[Wikipedia](https://ja.wikipedia.org/wiki/モンティ・ホール問題)によれば
> プレーヤーの前に閉じた3つのドアがあって、1つのドアの後ろには景品の新車が、2つのドアの後ろには、はずれを意味するヤギがいる。プレーヤーは新車のドアを当てると新車がもらえる。プレーヤーが1つのドアを選択した後、司会のモンティが残りのドアのうちヤギがいるドアを開けてヤギを見せる。
ここでプレーヤーは、最初に選んだドアを、残っている開けられていないドアに変更してもよいと言われる。
ここでプレーヤーはドアを変更すべきだろうか?

という問題だそうです。(※但し、モンティは外れの場所を知っていて、必ずヤギのいる場所を開ける。)
一見ドアを変えても変えなくても確率は変わらないように見えますが、実は**変えたほうがプレイヤーに有利**なのだそうです。今回はこの実験を大量に試行して結果を比較したいと思います。
言語はいつも安心のJava ~~(自分が好きなだけ)~~ を使用します。
# 要件
– ドアの数をNUMBER_DOORSとし

元記事を表示

初心者から始めるJava、式と演算子 1

追記:2020/3/4 参考書籍を追記
#はじめに
この記事は備忘録である。
参考書レベルの内容だが、本記事に掲載するコードについては、
**間違えた**ものが中心となる。これは実際にコーディング中に間違えた部分を掲載し、自分で反省するために投稿するという目的によるもの。
また、後日にJavaSilver試験問題の勉強を兼ねて復習するため、深い部分の話はここでは触れない。

#環境
言語:Java11、JDK13.0.2
動作環境:Windows10

#式とは
小さいころから四則演算を行い、式を読むことには慣れていると思うが、同じ電子演算機である電卓とプログラムとでは違う部分もあるので、注意が必要。

Javaにおいて「式」は以下の二つで構成される。

1、**演算の仕方【演算子】(Operator)**
ex) +(足す)、-(引く)、*(掛ける)、/(割る) etc…

2、**演算の対象【オペランド】(Operand)**
ex) 1 + 2 における1と2

#式の実践
プログラムでは同じ+を、「文字列の連結」と「演算」の両方に使うことができる。文字列は””で囲われた中身

元記事を表示

OTHERカテゴリの最新記事