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

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

ModelMapperでRecord->POJOへのマッピングがしたい

現在公式ではサポートされておらず、自前で実装する必要があります。

https://github.com/modelmapper/modelmapper/issues/546

以下2つを行うことで変換ができるようになります。

– `ValueReader`を自前で実装する
– `ModelMapper`の`Configuration`に上記で実装した`ValueReader`を追加する

## `ValueReader`を自前で実装する

`org.modelmapper.spi.ValueReader`というインターフェースが用意されているので、
`Record`のフィールドが取得できるように実装します。

以下のソースコードをコピペすれば使えると思います。
やっていることはシンプルで引数の値に応じてリフレクションを使って値を引っこ抜くというコードを書いています。

https://gist.github.com/okaponta/29a0a761db2282e588ebe6715353a560

## `ModelMapper`の`Configuration`に上記で実装し

元記事を表示

JUnit で引数をチェックするテストを書くには

Mockito の ArgumentCaptor を利用する。

例えば、呼び出したメソッド内で与えた初期値が引数としてわたっているかをチェックするため。

“`Java
import static org.mockito.Mockito.verify;
import org.mockito.ArgumentCaptor;

(省略)

// キャプチャする引数を用意
ArgumentCaptor idCaptor = ArgumentCaptor.forClass(Long.class);

// テスト対象を呼び出し
service.getReview(null);

// キャプチャ
verify(mapper).findById(idCaptor.capture());

// 評価
assertEquals(0L, idCaptor.getValue().longValue());
“`

## 参考

https://www.javadoc.io/doc/org.mockito/mockito-

元記事を表示

ABC253A~Dの解答[Java]

## はじめに
A、Bはコンテスト中に解いたコードなのでちょっと汚いかもしれませんがご了承ください(C、Dも多分汚いですが…)。

それでは解説していきます。

## A – Median?
問題文は[こちら](https://atcoder.jp/contests/abc253/tasks/abc253_a)

コンテスト中はなんだかよくわからなかったのですが、とりあえず間にあるか判断すれば良いと思ったのでそれに合った条件文を書きました。
“`A.java
import java.io.*;
class Main{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter pw = new PrintWriter(System.out);

public static void main(String[] args)throws IOException{
//A、B、C取得
String[] str = reads(

元記事を表示

初めてのJava silverオンライン受験で知っておきたかった事

# 初めてのJava silverオンライン受験で知っておきたかった事
他の方の記事で余り見かけなかった、自分が受験する前に知っておきたかった事を箇条書きで書いています。
※乱文でございます。お暇で無い方はオレンジ色で囲った文だけお目をお通しください。
※全ての手順が丁寧にわかる記事ではございません。
※この記事でオンライン試験を否定している訳ではありません。(※また、私がただ規約を丁寧に読んでいないだけということもございます。) 実際、次もオンラインで受験しようと思っています。

## 受験の申し込みの際
– 三つのアカウントが必要(オラクル、[CertView](https://catalog-education.oracle.com/pls/apex/f?p=1010:26:7043085265809)、ピアソンVUE)。[CertViewへログイン]ボタンをクリックするとオラクルのログインページに飛び、オラクルにログインするとCertViewのページに飛びます。アカウントをお持ちでない方はその都度作成してください。

:::note warn
※企業にお勤めでは

元記事を表示

SpringBootで戻るボタン押下後の二重送信を防止する

なんとか自己解決したが、SpringBootでbuild.gradleを用いた場合に再現できる情報がWebで見当たらなかったので、似たようなことで困った方がいれば参考にしていただきたいと思う。
(※この記事はSpringBootでRequestMappingやGetMappingでの画面遷移を行うための実装について、事前知識がある前提で進めます。)

# 環境
* SpringBoot ver.2.6.7
* Java 17
* build.gradleを用いたプロジェクト

# 参考サイト
http://terasolunaorg.github.io/guideline/5.3.1.RELEASE/ja/ArchitectureInDetail/WebApplicationDetail/DoubleSubmitProtection.html#transactiontokencheck

https://fintan-contents.github.io/spring-crib-notes/latest/html/web/double-submission/index.html

#

元記事を表示

4週目spring

スプリング

@Controller//1.遠隔呼び出し可能なプログラムへの呼び出し

public class Hello {

@RequestMapping(“/hello”)//2.URLとメソッドを接続

public void main() {

System.out.println(“Hello”);
}
}

ローカルサーバーから呼び出すと>
トムキャット内部で何かがオブジェクトを生成してくれるのでインスタンスメソッドも呼び出される。(staticがなくてもよい)

ちょっと java
int iv=10;//インスタント変数
static int cv=20;//スタティック変数
public void main() {

System.out.println(“Hello”);//インスタンス·マーサードiv,cv使用可能
}

public static void main(){//スタティックメソッドcvのみ使用可能

System.out.println(cv); ok
System.out.println(iv);エラー

ReflectionAPI=

元記事を表示

自作するDIコンテナ 0

# 動機

最近, Javaのリフレクションについて知り, フレームワークなどの中身に使われているらしいということを知りました. リフレクションは簡単にカプセル化を破壊してしまうので多用は禁物ですが, いろいろ便利な使い方ができるようです. そこで, ひとつのアプリケーションとしてDIコンテナを自作してみることにしました.

# DIとは

DIとはDependency injectionのことで, 依存性の注入です. これだけ聞いてもよくわからないですが, デザインパターンの一種のようです. [Wikipedia](https://ja.wikipedia.org/wiki/%E4%BE%9D%E5%AD%98%E6%80%A7%E3%81%AE%E6%B3%A8%E5%85%A5)によると,

>依存性の注入(いぞんせいのちゅうにゅう、英: Dependency injection)とは、コンポーネント間の依存関係をプログラムのソースコードから排除するために、外部の設定ファイルなどでオブジェクトを注入できるようにするソフトウェアパターンである。

ということです.

Java

元記事を表示

【Android】PlayBillingLibrary を3.0→4.0にバージョンアップ&課金処理実装してみた

# はじめに
こんにちは。
PlayBillingLibraryのバージョンを上げる機会があったので備忘録として残しておきます。

[RevenueCat](https://www.revenuecat.com/)というツールを使ってアプリにサブスクリプションを実装しようとした際にPlayBillingLibraryがVer4.0に上がるみたく今まではVer3.0を使っていたがビルドすら通らなくなったのでもれなくPlayBillingLibraryもVer4.0に上げなきゃいけない事になりました。

## PlayBillingLibraryとは
Androidアプリ内で課金を実装するライブラリです。
簡単に言うと課金処理の際にGoogle Playとアプリを繋げてくれるやつ。

このライブラリは毎年バージョンアップが行われサポート期間は2年です。
2年経つと足切りされ課金ができなくなる?のでチェックしてみてください。

ちなみに2022年6月現在Ver5.0までリリースされています。

以下参考

https://developer.android.com/google/play/b

元記事を表示

JREが指定されてなくてjava servletの勉強になかなか辿り着けなかった話

環境
Eclipse Version: 2022-03 (4.23.0)
Tomcat v10.0
java version: “18.0.1.1” 2022-04-22
Java(TM) SE Runtime Environment (build 18.0.1.1+2-6)
Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)

やろうとしたこと
UdemyでJavaサーブレットの勉強をしようとサーブレットを作成したところ、java.io.IOExceptionがインポートできない状況になった。他にもインポートするライブラリが見つけられず動的webプロジェクトが動作しなかった。

解決方法
Eclipseのプロジェクトエクスプローラから、該当する動的webプロジェクトを右クリックしてプロパティを選択する。その後Java ビルドパス内のライブラリタブから、JRE System Libraryを選択して編集をクリックする。Alternate JREでJREのバージョンを選択して適用すること

元記事を表示

未経験からエンジニアに転職して1年が経った振り返り

## はじめに

2021年7月からにエンジニアに転職して早1年が経とうとしています。

この1年でどのように自分が変化したのか、何がまだまだ足りていないのかを
自信の振り返りの為にも書き綴りたいと思いました。

まず率直な感想としては
「1年では自分がエンジニアだと自信をもって言えない」です。

その理由や詳細については順を追ってお話したいと思います。

### 入社前
営業やコールセンターなど、日本語をちゃんと話せれば誰でもできる仕事をふらふらとしていました。友人がエンジニア転職して、辛いながらも充実した生活を送っているのを知って、興味が湧きエン転職に登録しました。

当初は開発とかインフラとかそういった基本的なIT知識もありませんでした。(今もだがw)
当たり前のように「未経験からエンジニアへ!」みたいなキャッチフレーズの企業に応募しまくりました。

5社くらい受けて3社と面接し2社内定が決まりました。
一つは穏やかな雰囲気の会社、もう一つは割とスパルタな感じの会社。

まよわずスパルタを選びました。
20歳くらいのころにフィリピンにスパルタ英語留学をしていたので、その影

元記事を表示

Java if, for

ifは条件がTrueならif文、falseならelse if文。

int i = 7;
if (i > 5) {
System.out.println(“true”);
} else if (i < 5) { System.out.println("false"); } else { System.out.println("rest"); } この場合は ifで止まってtrueが表示されるが、intが4の場合falseが、5の場合restが表示。 Forは繰り返し文。 for (int i = 0; i < 10; i++) { //0から9までが出る System.out.println(i); if (i == 6) { break; // iが6まで出て止まる。 continue; iが6の場

元記事を表示

Java基礎の基礎

long l = 30L; intより大きな単位
double dd = 30.0; Doubleは小数点を指名
int i = (int) 30L; 小さい単位を大きい単位に表示するには小さい単位を宣言しないといけない
long ll = 30; 大木単位は小さい単位を含むのでそのままの入力でもOK

String str = “複数の文字”; 
System.out.println(“Hello”);

元記事を表示

RoomsのデータテーブルMigrationするのしんどすぎてテーブル消した

# 環境?
Android studioで言語はJavaを使ってるよ

# 発端
初めに何も考えずにRoomsでデータベース作った時,適当なサイトを参考にしてこんな感じで`export_schema=false`を設定してしまった

“`java:My_table.java
@Database(entities = {My_Entity.class}, version = 1, export_schema=false)
public abstract class My_Table extends RoomDatabase {
public abstract My_Dao My_Dao();
}
“`

事の発端はこれ.

# 問題
このあと何やかんやあって,Entityの仕様を大幅変更した.(カラムの削除と追加をやりたい放題した)

そのあと,シンタックスエラーだけ直してもう一度ビルドしたところ当然のように様々なエラーにであう.
↓例
## その1
“`c:
Room cannot verify the data integrity. Looks like you’ve

元記事を表示

ヨーダ記法で書いたら、「君はプログラムを読めない」といわれた話。

## 前提
Java11
2020年ごろ
コーディング規約はない


## 問題になったところ

“` Java
IF(a.equls(“AAA”)){
“`

## NullPointExcepitonで落ちるのめんどくさいなぁ・・・

“` Java
IF(a!=null && a.equls(“AAA”)){
“`
でもこのように書くのもなぁ・・・なんか長いしなぁ・・・

## そうだ!!!ヨーダ記法だ!!

“` Java
IF(“AAA”.equls(a)){
“`
これならa=nullでもfalseになるので問題ない。

## 君はプログラムが読めない
そもそも、左辺と右辺には意味がある。
そういうところがあるからプログラムを書けないと判断せざる負えない。
変数の意味を考えろ

とてもありがたい話をいただいたので

## Object.equls を使おう

“` Java
If(Object.equls(a,”AAA”)){
“`

これで全て解決だ。
nullも気にしなくてよい。

元記事を表示

JAVA 文法勉強2

相続(Incheritance)の定義
相続は、クラス間の上下関係で抽象的なスーパークラス(SuperClass)または親クラスからサブクラス(SubClass)または子クラスを作ることで、相続という関係を通じて階層構造を形成

相続特徴
1.スーパークラスで定義されたフィールドとメソッドを引き継ぐ
2.新しいフィールドやメソッドを追加できる
3.スーパークラスから受け継いだメソッドを修正できる = Overriding
4.同一スーパークラスを相続するすべてのサブクラスはタイプ互換性がある
5.2つ以上のクラスを同時に相続する多重相続はサポートされません

オーバーライディング(Overriding)
定義:スーパークラスから相続したメソッドを再定義すること
メソッドの名前とリターンタイプ、印字などがすべて同一でなければならず、異なる場合は新しいメソッドが追加される形式

オーバーライディングによりオブジェクト指向の特徴の一つである多形成の実現が可能

例えばフルーツクラスがあっておいしい()というメソッドがあるとしたら、フルーツクラスを引き継ぐイチゴとブドウがクラスを作る場合、お

元記事を表示

日本語でenum定数を定義してみた

# はじめに

いままでコーディングした中で、文字列定数の値(リテラル)やコメントに日本語を書くことはあっても、ソースコード本体に日本語を入れることはなかったと思います。
javaって、実はシンボル名に一部記号は使えないけど、日本語は使えます。
(ただ、一部使えない文字はあるようですが、最近、それを調べようという気力が・・・)

例えば、”東証”という定数に1を割り当てたいときに、東証って”Tokyo Stock Exchange,Inc”だから定数名をTOKYO_STOCK_EXCHANGEとするとか、”日通し”って何だよ?という疑問が起きるたびに、検索して、諦めたら謎の造語を考えたり、最終手段はローマ字。
こういう無駄な努力は止めて、せめて定数名くらい日本語でコーディングしてしまおうと思ったのです。

# 定数定義

REST APIにある「市場コード」をenum化します。
enum名はExchangeCodeにしました。
すっきりした定数名で日本語で2~3文字。

コードがメインなので、int idを持たせます。
String toString()は暗黙に実装されていますが、定数

元記事を表示

DJIのサンプルプログラムGSDemoのSDKバージョンを4.16.1にしてエラーが出るときの対処法

DJI Mobile SDKを学ぶうちにGSDemoのアプリを動かすことになった.今回タイトルのような事態となったので
公式のサンプルではSDKが4.15となっており,現時点(2022年6月6日)で発表されているSDK4.16.1には対応していない.
今回4.16.1にバージョンをあげたときにエラーが出たので,自分が行った対処法を記録する.
# 実行環境
| OS | AndroidStudio |
|:-:|:-:|
| Windows 10 Home | Bumblebee 2021.1.1 RC1 |
# java.lang.RuntimeException: Manifest merger failed with multiple errors, see logsがでたとき
### ①AndroidManifest.xmlのMerged Manifestをクリックする(画像赤枠)
![ManifestMergerFailed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/1918

元記事を表示

blastengine APIを使ってJavaで添付ファイル付きメールを送信する

[blastengine](https://blastengine.jp/)はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先に届くようになります。

今回はblastengineのAPIを使ってJavaで添付ファイル付きのメール送信を行うまでの流れを解説します。

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。

![getting-started-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b74e-e1e2-ac34-46d181ee2924.jpeg)

## 送信元ドメインのSPFを設定する

送信元として利用するドメイン(自分で持っているもの)の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。

“`
txt @

元記事を表示

blastengineを使ってJavaでメールを送信する

[blastengine](https://blastengine.jp/)はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先に届くようになります。

今回はblastengineを使ってJavaでメール送信を行うまでの流れを解説します。

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。

![getting-started-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b74e-e1e2-ac34-46d181ee2924.jpeg)

## 送信元ドメインのSPFを設定する

送信元として利用するドメイン(自分で持っているもの)の設定をします。これは任意のドメイン管理サービスで設定できますが、TXTレコードに以下のSPFを追加します。

“`
txt @ v=spf1 inclu

元記事を表示

blastengineのJava SDKを使ってメール送信を行う

blastengine(ブラストエンジン)はシンプルに使える開発者向けメールサービスを提供しています。何かと面倒なメール配信をシンプルに、かつ確実に送信先に届くようになります。

現在、Java向けに、blastengine SDKを開発しています。この記事では、その使い方を解説します。まずはテキストメールの即時送信についてです。

[blastengineMania/blastengine-java: Java SDK for blastengine](https://github.com/blastengineMania/blastengine-java)

## ユーザ登録する

blastengineにユーザ登録します。管理画面に入るためのユーザID、パスワードが手に入るので、ログインします(ユーザIDは後で使います)。

![getting-started-4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/197026/515541ad-b74e-e1e2-ac34-46d181ee2924.

元記事を表示

OTHERカテゴリの最新記事