1

私はちょうどJavaを学んでいますが、私の質問はJava関連で一般的なものです。

私の状況は次のとおりです。継承を通じて、いくつかのクラスで共通に使用したいメソッドがあります。メソッド ブロック内で、呼び出し元クラスの変数を宣言し、そこからオブジェクトを作成して呼び出し元クラスの ArrayList<> ("配列") に格納し、ObjectOutputStream ("出力") を介して出力を送信する必要があります。シリアル化されたファイルに。

次のクラスがあります。

CustomerInternalFrame.java は、Customer 型の ArrayList を使用してシリアル化された Customer.java の「配列」を維持します。

ContractorInternalFrame.java は、Contractor タイプの ArrayList を使用してシリアライズされた Contractor.java の「配列」を維持します。

VendorInternalFrame.java は、Vendor 型の ArrayList を使用してシリアル化された Vendor.java の「配列」を維持します。

これらの InternalFrame クラスのそれぞれに、次のメソッド addRecords があります (「Customer」を Customer、Contractor、または Vendor のいずれかの適切なクラスに置き換えます)。

private void addRecords() {

  // object to be written to the file
  Customer record;

  // loop until end of array
  for (Customer element : array) {

     // check for closed streamer and invalid entries
     try {

        // create a new object from current fields
        record = new Customer(
           element.getName(),
           element.getLastName(),
           element.getAddress1(),
           element.getAddress2(),
           element.getCity(),
           element.getState(),
           element.getZip(),
           element.getPhone(),
           element.getCell());

        // write new record
        output.writeObject(record);
     } // end try
     ... (catch blocks)
   } // end for
} // end method

上記の「Customer」という単語をプログラムで変更する方法を一生懸命考え、長い間探しました。これにより、単一のメソッド (またはクラス) addRecords() を宣言し、3 つの InternalFrame クラスのそれぞれでそれを使用することができます。コードを複製します。もちろん、すべての場合に「Customer」という単語を「Object」に置き換えることはできません。これは、「Object」には getName()、getAddress1() などのメソッドがないためです。「Customer」を「Object()」に置き換えることもできません。 "配列、同じ理由で。(つまり、通常の解決策である配列の使用は、この場合には機能しません。なぜなら、スーパークラス配列を使用してからダウンキャストする必要があるためです。ただし、ダウンキャストするには、最初に名前が付けられたクラスを最初に宣言する必要があります。したがって、この場合、配列は単なる悪循環です。)

3 つの個別の addRecords() メソッドを使用すると、それぞれのファイルに記録しているフィールドを変更できることに気付きました。Customer、Contractor、および Vendor は異なるフィールド セットを持っている可能性があるからです。しかし、コードで行っていることは同じですが、異なるクラス (同様のイベントハンドラーなど) によって呼び出される、似たような状況が他にもあります。全然できます。

では、メソッドまたはコンストラクターに渡すことを含め、変数の型を変更して、複数のクラスが同じコードを使用してそれらの特定のクラスのオブジェクトを作成できるようにする方法はありますか?

4

1 に答える 1