質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

2390閲覧

複数のメソッドを一つにまとめる方法

cretter

総合スコア91

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/07/22 15:11

前提・実現したいこと

下のコードのように中の処理は同じでも要求する型によって毎回新しいメソッドを作っているのですが、もっと効率的な書き方はありませんか。

該当のソースコード

java

1public class Test{ 2 public static void main(String[] args){ 3 new Test(); 4 } 5 Test(){ 6 a(1); 7 a("1"); 8 } 9 10 void a(int z){ 11 System.out.println(z); 12 } 13 void a(String z){ 14 System.out.println(z); 15 } 16}

補足情報(FW/ツールのバージョンなど)

java version "16.0.1" 2021-04-20
Java(TM) SE Runtime Environment (build 16.0.1+9-24)
Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

中の処理は同じでも要求する型によって毎回新しいメソッドを作っているのですが、もっと効率的な書き方はありませんか

Javaのジェネリクス(総称型)を使う方法があります。メソッドの型の前に<T>のように宣言し、その型を利用する部分にTを当てはめます。例えば<T> void a(T z) {} のように定義すると void a(1);と呼び出したときに自動的にそのクラス型に変換されます。

質問者さんのコードをもとにジェネリクスを使うよう直したサンプルが以下、です。

Java

1public class Main { 2 3 public static void main(String[] args) { 4 5 Main obj = new Main(); 6 7 obj.a(1); 8 9 obj.a(2.1); 10 11 obj.a("This is a string."); 12 13 obj.a((byte)0x7f); 14 } 15 16 <T> void a(T z) { 17 System.out.println("----"); 18 System.out.println(z); 19 20 // 型を出力 21 if (z instanceof Integer) { 22 System.out.println("Integer"); 23 } else if (z instanceof Double) { 24 System.out.println("Double"); 25 } else if (z instanceof String) { 26 System.out.println("String"); 27 } else { 28 System.out.println("Other"); 29 } 30 } 31}

Windowsコマンドプロンプト上での実行例です。

CMD

1C:>java --source 8 Main.java 2---- 31 4Integer 5---- 62.1 7Double 8---- 9This is a string. 10String 11---- 12127 13Other

「Java generics」などとキーワード検索すれば多くの記事がヒットしますので、そちらも参考にしてください。

投稿2021/07/22 17:59

編集2021/07/22 18:01
dodox86

総合スコア9256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

System.out.println

がどう作られているか、ソースコードを探してみては如何でしょうか。

投稿2021/07/22 15:23

jimbe

総合スコア13209

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cretter

2021/07/22 15:38

System.out.println にこだわりがあるわけではないです。 そこにはほかの処理が入る予定です。 今は例として書いただけです。
jimbe

2021/07/22 16:09

はい。ですが、println 「のような感じ」でとイメージされていると考えました。 言ってしまえば「何をしたいかに依ります」ということになってしまいますので、まずは例として出された println のソースコードを("なぜ println はこのようになっているのか"等)参考にお考えになってみては…とした次第です。
guest

0

Objectでまとめてしまうのは如何でしょう

java

1public class Test { 2 public static void main(String[] args){ 3 new Test(); 4 } 5 Test(){ 6 a(1); 7 a("1"); 8 } 9 10 void a(Object z){ 11 System.out.println(z); 12 } 13}

出力:
1
1

投稿2021/07/22 16:10

MikenekoSamane

総合スコア102

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問