Javaでは、コードモジュールに1つのパブリックなトップレベルクラスしか作成できません。 したがって、イテレーターを public として宣言しなければならない場合 (イテレーターに with 節を組み込む場合など) は、コード・モジュール内の他のクラスを public として宣言することはできません。
別のクラスの中にネストした static クラスとして宣言する方法
この代替方法の場合は、イテレーター宣言と他のクラス宣言を同じソース・ファイルの中で組み合わせ、イテレーターと他のクラスを public として宣言し、イテレーター・クラスを他のコード・モジュールやパッケージから参照できるようにすることが可能になります。 ただし、ネスト元のクラスの外からイテレーターを参照する場合は、ネスト元のクラスの名前を付けた完全修飾イテレーター名を指定する必要があります。
別のクラスの inner クラスとして宣言する方法
この方法でイテレーターを宣言する場合は、ネスト元のクラスのインスタンスの中でしかイテレーターのインスタンスを生成できません。 ただし、ファイルの中でイテレーターと他のクラスを public として宣言することは可能です。
#sql iterator ByName(String LastName, Date HireDate); 1
// Declare named iterator ByName
{
…
ByName nameiter; // Declare object of ByName class 2
#sql [ctxt]
nameiter={SELECT LASTNAME, HIREDATE FROM EMPLOYEE}; 3
// Assign the result table of the SELECT
// to iterator object nameiter
while (nameiter.next()) // Move the iterator through the result 4
// table and test whether all rows retrieved
{
System.out.println( nameiter.LastName() + " was hired on "
+ nameiter.HireDate()); // Use accessor methods LastName and
// HireDate to retrieve column values
}
nameiter.close(); // Close the iterator 5
}