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

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

Rust初心者にとってEnumは難しい!JavaのEnumと何が違うの?

# ことのあらまし

Rust入門してもうすぐ2週間のみゆきです。

Rustの列挙型は集合論では直和集合、Tagged-Union と言われたり、列挙子に値を持てる点がJavaやC#といった他の言語の列挙型と違う点と解説されています。

なんとなく雰囲気が違うのは感じ取れるのですが、私の頭では理解が追い付いてないです。

特に、RustのEnumが値を持てる点で、「そういえばJavaのenumも高機能でどんな値でも(自作型でも配列でも)持つことができたはず!」ということを思い出しました。

では、両者は一体何が違うのか実際に書いて比較してみました。

※勢いで書いているので間違ったことを書いているかもしれません ><

# Rust と Java の Enum を比較

まず、確認の意味も含めて単純なenumでJavaとRustを比較してみます。

“`rust:Rust
enum Hoge {
V1,
V2,
}

// 使い方
let hoge: Hoge = Hoge::V1;
“`
“`java:Java
enum Hoge {
V1, //ordinal(

元記事を表示

AWS Cloud9でJavaの開発環境を構築する

# 背景・目的
– KDAを試すにあたり、[必要なJavaの環境](https://docs.aws.amazon.com/ja_jp/kinesisanalytics/latest/java/getting-started.html)を準備します。
– 以前、[AWS Clou9を試してみた](https://qiita.com/zumax/items/312d20594b7eecbd533d)で構築した環境を利用します。

# 実践
## Javaのバージョンを確認
– 現在のバージョンを確認します。
– すでに、Java11が入っています。
“`
$ java –version
openjdk 11.0.14.1 2022-02-08 LTS
OpenJDK Runtime Environment Corretto-11.0.14.10.1 (build 11.0.14.1+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.14.10.1 (build 11.0.14.1+10-LTS, mixed mode)
$
“`
##

元記事を表示

Effective Java 第3版まとめ(項目2)

# 項目2.多くのコンストラクタパラメータに直面したときにはビルダーを検討する

## 書かれている内容

* staticファクトリメソッドとコンストラクタは、多くのオプションパラメータに対しては、どちらもうまく対応できない
* テレスコーピング・コンストラクタ・パターンは、コードを書くのが困難になり、加えてそのコードを読むのはさらに困難になる
* JavaBeansパターンは生成過程の途中で不整合な状態にあるかもしれない
* JavaBeansパターンはクラスを不変にする可能性を排除してしまう
* ビルダーはテレスコーピング・コンストラクタ・パターンの安全性とJavaBeansパターンの可読性を組み合わせている

## 個人の見解

ビルダーを検討しないといけないようなオプションパラメータが多い状況は、オブジェクトの責務が大きすぎるように思う。
まずはオブジェクト指向エクササイズの「1つのクラスにつきインスタンス変数は2つまでにすること」を心がけた上で、選択肢の1つとしたい。

## オブジェクト指向エクササイズとは

### 9つのルール

1. 1つのメソッドにつきインデントは

元記事を表示

テンプレートメソッドとは

## 概要
テンプレートメソッドとはOOPの代表的なデザインパターンの一つで、

CSVインポートとXMLインポートなど、**大まかな流れは似てるけど細かいところが違う処理**を複数作成する必要があるときに、
– 一つのクラス内で各ステップをメソッド化し、同じクラス内の別のメソッドでそれらを順番に実行するようにする
– 上記のクラスの子クラスでメソッドの内容を適宜上書きすることでいろいろな仕様に対応できるようにする

というものです。特に親クラスの「それらを順番に実行する」メソッドが「テンプレートメソッド」と呼ばれます。

親クラスが「我々を呼ばないでください、我々が呼びます」と言っているという意味で「ハリウッド原則」と呼ばれることもあるようです。

これはデザインパターンを知らなくても似たようなことをやったことがある人が多いのではないかなと思います。

## 埋め込み方法
### 親クラス
– 必要なステップをそれぞれメソッドに格納する。
– テンプレートメソッド内で上記の処理を実行する。
– 絶対上書きしてほしいメソッドは抽象メソッドにする。
– 上書きしなくてもいいメソッドはデフ

元記事を表示

コンピュータとオセロ対戦51 ~層~

https://qiita.com/tt_and_tk/items/068f2afde6db637e189f

[前回](https://qiita.com/tt_and_tk/items/54101f07855763fb4924)

# 今回の目標
全結合層、畳み込み層、プーリング層を作る
# ここから本編
## 現在のディレクトリ構成

“`
MyNet2
├── Matrix.java
├── actFunc
│   └── 活性化関数クラス
├── layer
│   └── 層クラス
└── tests
└── テストクラス
“`

## actFunc
活性化関数についてはMyNetとほぼ同じですので、省略します。

## Layer
層について、基本的な定義づけを行います。
まず層とは、ここではノードが一列に並んだものを指すことにします。ただ、これまでのように入力層や出力層を特別扱いすることはありません。また、畳み込み層とプーリング層も層です。
MyNetはノードクラスを用いたことで畳み込み層やドロップアウトなどの作成が困難でしたが、MyNet2ではネットワー

元記事を表示

Spring Boot + Vue.js + Axios でいいね機能の実現

# はじめに
Spring Boot学習中の者です。学習のためにアプリケーションを作成していて、いいね機能を実装する上で考えたこと等をまとめました。

# 参考文献

https://qiita.com/yoyoyo/items/b288f067d5de04f26046

https://masawada.hatenablog.jp/entry/2017/04/19/105243

# 使用技術
Spring Boot 2.6.6
Spring Security
Thymeleaf
MySQL
Mybatis 2.2.0
Vue.js
Axios

# いいね機能のロジック
以下の要件を満たすようないいね機能を実装しました。
1.ユーザは、一つの投稿に対し1回「いいね」を押すことができる。
2.ユーザが対象の投稿に既に「いいね」を押していた場合、その「いいね」は取り消される。

# テーブル
今回の例で使う「ユーザの投稿情報」を持つPOSTテーブルと、「ユーザがいいねした投稿情報」を持つLIKESテーブルの構成です。
POSTテーブル(主キー:POSTID)
|カラム名|POSTID|

元記事を表示

【Spring】Validation(入力チェック)

# 概要

当記事では、
  ・標準機能のValidation
  ・独自実装Validation
の実装方法について説明します。

# 標準機能のValidation
必須チェックを実装したい場合を例にすると、
「javax.validation.constraints.NotEmpty」など
下記の「 @NotEmpty(message = “入力してください。”) 」のように、
指定することで簡単に実装することができます。
“`
@NotEmpty(message = “入力してください。”)
public String mailAddress;
“`

# 独自Validation

## アノテーション実装
“`/ValidationDemo/src/main/java/com/example/demo/validation/UnavailableString.java
package com.example.demo.validation;

import static java.lang.annotation.ElementType.*

元記事を表示

【spring】flywayを使用したマイグレーション

# 概要
Springでflywayを使用したマイグレーション方法について説明します。

# 準備
## pom.xmlにflywayを追加
下記を追加する
“`/{プロジェクト名}/pom.xml

org.flywaydb
flyway-core

“`

## DB接続情報を追加
“`/{プロジェクト名}/src/main/resources/application.properties
spring.datasource.url=jdbc:mysql://localhost/{接続DB名}
spring.datasource.username={接続ユーザ名}
spring.datasource.password={接続ユーザのパスワード}
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
“`

## 実行SQL文用意
“`/{プロジェクト名}/src/

元記事を表示

Effective Java 第3版まとめ(項目1)

# 項目1.コンストラクタの代わりにstaticファクトリメソッドを検討する

## 例

“`java
public class EffectiveJava1 {

// コンストラクタ
public EffectiveJava1() {
}

// staticファクトリメソッド
public static EffectiveJava1 newInstance() {
return new EffectiveJava1();
}
}
“`

## 長所

1. 名前を持つこと
1. その呼び出しごとに新たなオブジェクトを生成する必要がないこと
1. メソッドの戻り値型の任意のサブタイプのオブジェクトを返せる
1. 返されるオブジェクトのクラスは、入力パラメータの値に応じて呼び出しごとに変えられる
1. 返されるオブジェクトのクラスは、そのstaticファクトリメソッドを含むクラスが書かれた時点で存在する必要さえない

## 短所

1. publicあるいはprotectedのコンストラクタを持たないクラスのサブク

元記事を表示

Scalaの勉強はじめました 6 〜関数型プログラミング編 関数について〜

## はじめに
N予備校で「Scala応用」コースを受講しています。
今回から関数型プログラミングについてです。

## 関数型プログラミング
:::note
外部の状態を変化させない関数だけでプログラミングを行うこと
:::

外部の状態を変化させることを、**副作用**という。

### 副作用のある関数
変数を変更する
オブジェクトが持っているフィールドの値を書き換える
例外やエラーを発生させる etc.

### 参照透過性
値と式が交換できるような関数
“`scala
def square(n: Int) = n * n
“`
同じ値を入れたら必ず同じ結果になることが保証されたもの、かな。
正直テキストよりもこっちの方がまだわかりやすい。

https://gimo.jp/glossary/details/referential_transparency.html

## 関数
“`scala
val add = new Function2[Int, Int, Int] {
def apply(x: Int, y: Int): Int = x + y
}
“`

元記事を表示

【Java】Spring Data JPA関連プロパティ @application.properties

# プロパティ一覧(随時追加)
“`properties
spring.jpa.properties.hibernate.jdbc.time_zone=Asia/Tokyo
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=none
“`

# spring.jpa.properties.hibernate.jdbc.time_zone
・データベースのタイムゾーンを設定する。
・設定方法は2つあるが、今回は設定方法2。

 設定方法1:JDBC URLのパラメータとして設定
 設定方法2:spring.jpa.properties.hibernate.jdbc

元記事を表示

【Java】HibernateでEntity/DB間をマッピングする仕組み

# まえがき
Entityクラスに@Table,@EntityをつけてORMをなんとなくで実現していたが、その仕組みをちゃんと知ろうという記事。

https://www.baeldung.com/hibernate-naming-strategy

# 2つのNaming Strategy
・Entityクラス と DB 間で「テーブル名」「カラム名」のマッピングを行う際にNaming Strategyを利用する。
・Naming Strategyは「Explicit Strategy」と「Imlicit Strategy」の2つ存在する。
・マッピング処理は次のフローで行われる。

 ① LogicalNameの決定【Implicit Strategy】
 ② PhysicalNameの決定【Explicit Strategy】

  LogicalName:Javaで扱うテーブル名,プロパティ名
  PhysicalName:DBとマッピングさせるテーブル名,プロパティ名

# ① LogicalNameの決定【Implicit Strategy】
・デフォルトのImplicit

元記事を表示

【Java】JPA備忘録(Entity・ID自動採番・Repository・Specification・@Transational)

# まえがき
SpringBootでWEBアプリケーションを作るとき、よくSpring Data JPAを利用する。
Entityクラス関連のアノテーションや、トランザクションの動きについて時間が経つと忘れるので、備忘として残す。

# Entityクラス
“`java
@Entity
@Table(name = “sample_user”)
// @CreatedDate @LastModifiedDate を活性化するために必要
@EntityListeners(AuditingEntityListener.class)
public class SampleUserEntity implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer userId;
private String name;
private Integer age;
private String gender;
pri

元記事を表示

auカブコム証券のkabuステーションREST APIで自前のトレイル注文を作ってみる(注文発注編)

# はじめに

前記事
1. [auカブコム証券のkabuステーションREST APIをcurlで叩く](https://qiita.com/hiuchida/items/fcdd3d6ff921b386a37e)
2. [auカブコム証券のkabuステーションREST APIをjava(generated by the swagger code generator)で叩く](https://qiita.com/hiuchida/items/73b7fc846d4c9501ef2f)
3. [auカブコム証券のkabuステーションREST APIの残高照会をcurlとjavaで叩く](https://qiita.com/hiuchida/items/9eb5336755a3d1b1a3df)
4. [auカブコム証券のkabuステーションREST APIの残高照会から先物OPのdeltaを計算する](https://qiita.com/hiuchida/items/6e0d8d5114192bec1632)
5. [auカブコム証券のkabuステーションREST APIのテスト用モック

元記事を表示

VSCodeのJavaのOrganize Importsで削除済みファイルが候補に残り続ける場合の対処法

名前変更等で削除されたファイルがキャッシュに残り続け、Organize Imports時に候補になってしまう現象への対処方法です。

コマンドパレット(F1キー等で起動)で以下のコマンドを実行します。
“`
Java: Clean Java Language Server Workspace
“`
一応スクショも。
![スクショ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139956/38c20fc8-4a1d-94c1-9d38-368f3843f8e2.png)
VSCodeのキャッシュのクリア等で検索すると `Clear Editor History` コマンドが出て来ますが、この現象に対してそちらは効果がありません。
同じような原因でビルドエラーになった際、たまたま今回のコマンドに気づいたのでメモとして残しておきます(通常はすぐビルドするから今回のような現象でハマらないのかも知れない…)。

元記事を表示

Spring O/R Mapperの使い分け

# O/R Mapperとは何か
O/R Mapperはオブジェクト指向言語で書かれたアプリケーションと非オブジェクト指向であるデータベースやSQLの間のインピーダンスミスマッチを解消させるためのフレームワークである。今回はメジャーなO/RMapperである以下のフレームワークについて調査する。
* JPA(Java Persistance API)
* MyBatis

# JPA(Java Persistance API)
* Domainに@Entity等のアノテーションを付与することで設定する
* CRUDに関わる基本的なメソッドがEntityManagerから提供されるため、冗長なSQLの記載が不要になる
* 独自のクエリを発行する際は、SQLライクな独自のクエリ言語であるJPQL(Java Persistance Query Language)を使用する

以下にDomainの実装例を示す。
“`java
package com.example.todo.domain.model;

import java.io.Serializable;
import java.ut

元記事を表示

Spring4ShellがGlassfishとPayaraに拡大:同じ脆弱性ですが、新しい悪用法です

本記事は2022年4月8日(米国時間)に公開した英語ブログ[Spring4Shell extends to Glassfish and Payara: same vulnerability, new exploit](https://snyk.io/blog/spring4shell-rce-vulnerability-glassfish-payara/)を日本語化した内容です。

[![logo-solid-background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2216557/2691d8df-331d-96e6-dee7-9f990f036d53.png)](https://snyk.io/jp)

先週、[Spring4Shell](https://security.snyk.io/vuln/SNYK-JAVA-ORGSPRINGFRAMEWORK-2436751)の発見について発表しました。`spring-beans`パッケージの古いバージョンにリモートコード実行(RCE)の脆弱性

元記事を表示

【Java】RestTemplate・WebClient・MockMvc 比較メモ

# まえがき
APIからAPIをコールする場合や、テストプログラム内からAPIをコールしたい場合に「何使えばいいの?」というところで以下の3つが挙げられる。

・[RestTemplate](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html)(org.springframework.web.client.RestTemplate)
・[WebClient](https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.html)(org.springframework.web.**reactive**.function.client.WebClient)
・[MockMvc](https://docs.spring.io

元記事を表示

ElasticBeansTalk + Spring boot でEverything(It’s you)してみた

# Elastic Beanstalkって?

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119864/68155040-90dd-a0de-a1bd-f377e7d5c895.png)

> AWS Elastic Beanstalk は、Java、.NET、PHP、Node.js、Python、Ruby、Go および Docker を使用して開発されたウェブアプリケーションやサービスを、Apache、Nginx、Passenger、IIS など使い慣れたサーバーでデプロイおよびスケーリングするための、使いやすいサービスです。

というのは漠然とわかっていたのですが、触ったことがなかったので、とりあえずElastic Beanstalk x Spring bootで何かやってみたかったから、ちょっと触ってみた程度です。

例によってEverything(It’s you)です。get叩いて1フレーズ返すだけですが・・

# アプリケーション作成

![image.png](htt

元記事を表示

Paraya Server と IntelliJ IDEAで Webアプリケーションの開発環境を構築する

# Payara Serverをインストールする
Payara Serverを[ダウンロード](https://www.payara.fish/downloads/payara-platform-community-edition/, “ダウンロード”)します。

ダウンロードしたファイルを解凍します。
“`
unzip payara-5.2022.1.zip
“`

解凍したフォルダを任意のフォルダに移動します。
“`
mv ~/Downloads/payara5 ~/tools/
“`

# Payara Platform Toolsをインストールする
IntelliJ IDEAを起動します。

プラグインをクリックします。
![スクリーンショット 2022-04-09 5.56.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/14202/8948d714-dff6-485d-eec7-bfaad1f9247c.png)

検索バーに、「Payara」と入力します。
「Payara Pl

元記事を表示

OTHERカテゴリの最新記事