JAvaベース(9)可変パラメータリストの紹介
2358 ワード
一、可変パラメータの概要
パラメータの個数が不確定な場合は、可変パラメータリストを使用できます.
1.構文:パラメータタイプ...(3点)
例:void printArray(Object...)
注:各メソッドには最大1つの可変パラメータしかありません.なぜなら、可変パラメータはメソッドの最後のパラメータでなければなりません.
2.可変パラメータのタイプ可変パラメータは任意のタイプに設定できます:参照タイプ、基本タイプ;もちろんタイプチェックも行います.
3.パラメータの個数:0個のパラメータ 個のパラメータ:配列であれば、この配列を直接パラメータとしてメソッドに転送し、新しい配列を埋め込まない. 複数のパラメータ:パラメータは配列であってもよいし、単一の変数、定数であってもよい.しかし、このとき、これらのパラメータを新しい配列に埋め込み、この配列をメソッドに転送します.
4.可変パラメータの使用
可変パラメータは完全に1つの配列として使用することができ、あるいは本質的に可変パラメータは1つの配列である(以下詳細に説明する).したがって,配列が持つメソッド,属性は,可変パラメータのように持つ.
上記の例では、可変パラメータの使用は配列の使用と全く同じであり、すなわち、可変パラメータは配列に等価である
5.可変パラメータのメソッドリロード
可変パラメータリストのメソッドのリロードは、通常のメソッドとは異なります.可変パラメータのタイプを変更するだけでメソッドをリロードすることはできません.
たとえば、
二、可変パラメータの原理を深く分析する
可変パラメータの様々な態様は、前述したように詳細に説明されている.このセクションでは、可変パラメータの実装原理、特に可変パラメータの使用が配列と同じである理由を深く理解します.
次の簡単な例を見てみましょう.
例は簡単です.コンパイラがどのように処理されているかを理解するために、jadで上記の例のclassファイルを逆コンパイルします.
逆コンパイルの結果から,コンパイラは可変パラメータを配列
今から見れば、可変パラメータのリストはそれほど不思議ではなく、プログラマーの仕事を簡略化し、コンパイラに任せて処理したにすぎない.最後に,可変パラメータの使用は配列と同様に珍しくない.可変パラメータは最後にコンパイラによって配列に処理され,可変パラメータは配列であるからである.
転載先:https://www.cnblogs.com/jinggod/p/8426046.html
パラメータの個数が不確定な場合は、可変パラメータリストを使用できます.
1.構文:パラメータタイプ...(3点)
例:void printArray(Object...)
注:各メソッドには最大1つの可変パラメータしかありません.なぜなら、可変パラメータはメソッドの最後のパラメータでなければなりません.
2.可変パラメータのタイプ可変パラメータは任意のタイプに設定できます:参照タイプ、基本タイプ;もちろんタイプチェックも行います.
3.パラメータの個数:
4.可変パラメータの使用
可変パラメータは完全に1つの配列として使用することができ、あるいは本質的に可変パラメータは1つの配列である(以下詳細に説明する).したがって,配列が持つメソッド,属性は,可変パラメータのように持つ.
public void varArgMethod(int b,int... arr) {
// , length
int lenth = arr.length;
//
for(int i=0;i
上記の例では、可変パラメータの使用は配列の使用と全く同じであり、すなわち、可変パラメータは配列に等価である
5.可変パラメータのメソッドリロード
可変パラメータリストのメソッドのリロードは、通常のメソッドとは異なります.可変パラメータのタイプを変更するだけでメソッドをリロードすることはできません.
たとえば、
varArray(int... a)
、varArray(Object... a)
の場合、この2つのメソッドは呼び出し時にエラーが発生し、メソッドの再ロードに失敗します.二、可変パラメータの原理を深く分析する
可変パラメータの様々な態様は、前述したように詳細に説明されている.このセクションでは、可変パラメータの実装原理、特に可変パラメータの使用が配列と同じである理由を深く理解します.
次の簡単な例を見てみましょう.
public class MyTest{
public static void main(String[] args) {
int a = 100;
varArgMethod(5, 7,8,9,10,a);
}
public static void varArgMethod(int b,int... arr) {
//
for(int i=0;i
例は簡単です.コンパイラがどのように処理されているかを理解するために、jadで上記の例のclassファイルを逆コンパイルします.
public class MyTest {
public static void main(String args[]) {
int a = 100;
varArgMethod(5, new int[]{7, 8, 9, 10, a});// int[]
}
public static transient void varArgMethod(int b, int arr[]) { //
for (int i = 0; i < arr.length; i++)
System.out.println(arr[i]);
}
}
逆コンパイルの結果から,コンパイラは可変パラメータを配列
varArgMethod(int b, int arr[])
に処理するだけでなく,可変パラメータメソッドを呼び出すパラメータリストを処理し,パラメータリストを1つの配列varArgMethod(5, new int[]{7, 8, 9, 10, a})
にカプセル化することが分かる.今から見れば、可変パラメータのリストはそれほど不思議ではなく、プログラマーの仕事を簡略化し、コンパイラに任せて処理したにすぎない.最後に,可変パラメータの使用は配列と同様に珍しくない.可変パラメータは最後にコンパイラによって配列に処理され,可変パラメータは配列であるからである.
転載先:https://www.cnblogs.com/jinggod/p/8426046.html