• ベストアンサー
  • 暇なときにでも

関数型インターフェースの配列の作り方

  • 質問No.9610335
  • 閲覧数65
  • ありがとう数1
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 66% (2/3)

関数型インターフェースを勉強し始めた者です。
関数型インターフェースの配列はどのように作ればよいのでしょうか?

関数配列のようなものを作ろうとして以下のプログラムを作りました。
環境:Windows 7 64bit
IDE:Eclipse 4.5.2
JDK:1.8

package interfaceSample;

import java.util.function.Function;

public class FuncSample3 {

public static void main(String[] args) {
//@SuppressWarnings("unchecked")
Function<Integer, Integer>[] funcList = new Function[3];
funcList[0] = FuncSample3::mul;
funcList[1] = FuncSample3::add;
funcList[2] = FuncSample3::sub;

for (Function<Integer, Integer> function : funcList) {
funcApply(function, 10);
}
}

public static int mul(int x) {
return x * 2;
}

public static int add(int x) {
return x + 2;
}

public static int sub(int x) {
return x - 2;
}

public static void funcApply(Function<Integer, Integer> func, int t) {
System.out.println("この関数の値は"+func.apply(t));
}

}

このプログラムを打ち込んだところ、期待通りの出力をしてくれたのですが、以下の警告が出てきました。

型の安全性: 型 Function[] の式は、未検査の型変換を使用して Function<Integer,Integer>[] に準拠するようにする必要があります

このメッセージでググって見たのですが、インターフェースについてこのメッセージが出たケースに当たりませんでした。
@SuppressWarnings("unchecked")を付ければ警告は消えるのですが、あんまり気分が良くないです。
よろしくお願いいたします。

※OKWAVEより補足:「Webシステム開発」についての質問です。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 59% (970/1642)

[技術者向] コンピューター カテゴリマスター
総称配列エラーについては私も理解していませんでしたが、「Java 総称配列」でググって見つかる
http://www.ne.jp/asahi/hishidama/home/tech/java/generics.html
https://nagise.hatenablog.jp/entry/20180214/1518569217
これらを読むと良いと思います。
結論は、Java言語が作られてきた歴史的経緯が理由で総称型(Generic)に制限があるため、と言うことになります。

そもそもを言えば配列の使用は避けて、List型等を使え、という事ですね。
お礼コメント
mental_HELLth

お礼率 66% (2/3)

返信が遅くなりまして大変申し訳ありませんでした。
総称型にこのような制限があるとは全く知らなかったので、大変参考になりました。
今後このような機会がありましたら(あるのでしょうか?)、Listを使うようにします。
ありがとうございました。
投稿日時:2019/05/07 12:21

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 59% (970/1642)

[技術者向] コンピューター カテゴリマスター
JDK 1.8とは古いですね。

>new Function[3];
そのワーニングの内容そのままですよ。
new Function<Integer,Integer>[3]
という具合に、型に依存する引数を省略せずに記述してください。
補足コメント
mental_HELLth

お礼率 66% (2/3)

回答いただきましてありがとうございます!
変更してみたのですが、今度は以下のエラーが発生しました。。。

Function<Integer,Integer> の総称配列を作成できません

せっかく回答していただいたのにすみません。。。
JDKが古いのは研修で使っているのがこのバージョンだからです。
投稿日時:2019/04/26 14:24
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

ピックアップ

ページ先頭へ