2

指定された引数(ユーザー名、パスワードなど)に基づいて、データベースにユーザーを追加する方法があります。

public boolean addUser(String username, String password, 
    String f_name, String l_name, String email) 
{
    try 
    {
        pstmnt = conn.prepareStatement("INSERT INTO users VALUES (user_id_increment.nextval,?,?,?,?)");
        //do stuff...

そして、UserオブジェクトをArrayList

public boolean addUser(User username)
{
    if(users.contains(username))
        //do stuff...

ただし、共通のインターフェイスを介して両方のケースを実装しようとしています。

public interface Admin_DAO {

    public void addUser();
    //other methods...

異なる引数が必要な場合、両方のクラスが同じインターフェイスを実装できるようにする方法がわかりません。

何か案は?

4

5 に答える 5

3

複数の異なるシグネチャを持つインターフェイス メソッドを実装することはできません。

これで問題が解決したので、明確にしましょう。インターフェイスにはメソッド シグネチャが含まれます。メソッド シグネチャを変更してそのインターフェイスを実装することはできません。Java がメソッドを認識する方法が根本的に変わるからです。Java は、署名が異なる 2 つのメソッドを、名前が異なる場合と同じように異なるものと見なします。したがって、2 つの異なるメソッドを持つクラスを作成できますがaddUser、インターフェイスからメソッドをオーバーライドするのはそのうちの 1 つだけです。

メソッドがまったく異なる情報を必要とする場合、おそらく同じインターフェースを実装すべきではありません。ただし、本質的に同じ情報を異なる形式で必要とする場合は、その情報に共通の形式を受け入れるインターフェイスを作成する必要があります。そうすれば、両者はそれを実装できます。たとえば、 aUserが基本的に次のようになっていることが判明した場合:

public User(String username, String password, String f_name, String l_name, String email) {
}

次に、インターフェイスがオブジェクトを受け入れるようにすることができUserます。

public interface Admin_DAO {
    public void addUser(User u);
}

そして、必要に応じて、さまざまなクラスでそれを実装できます。

于 2013-06-20T14:53:31.093 に答える
0

理想的には、2 つのクラスが必要です。両方の方法に使用される情報は同じです。インターフェイスは次のようになります。

interface Admin_DAO{

public void addUser(User user);

} 

そして、このインターフェースを実装する 2 つの別個のクラスが必要です。

class AddUserToList implements Admin_DAO{
    public void addUser(User user){
      //add user to list
    }

class addUserToDB implements Admin_DAO{

   public void addUser(User user){
      //add user to list
    }

各クラスは、実際には 1 つの目的を果たす必要があります。

于 2013-06-20T15:04:59.890 に答える
0

簡単な答えできません。 GoF Design Patterns の本の中で、私のお気に入りの段落をいくつか紹介します。以下のテキストは、あなたが持っているクエリをクリアするはずです. 何度か読みたくなるかもしれません。

オブジェクトによって宣言されたすべての操作は、操作の名前、パラメーターとして受け取るオブジェクト、および操作の戻り値を指定します。これは、操作のシグネチャと呼ばれます。オブジェクトの操作によって定義されるすべてのシグネチャのセットは、オブジェクトへのインターフェイスと呼ばれます。オブジェクトのインターフェースは、オブジェクトに送信できる要求の完全なセットを特徴付けます。オブジェクトのインターフェースの署名に一致するリクエストは、オブジェクトに送信できます。

タイプは、特定のインターフェースを示すために使用される名前です。オブジェクトが「ウィンドウ」という名前のインターフェースで定義された操作に対するすべての要求を受け入れる場合、そのオブジェクトは「ウィンドウ」タイプを持つと言えます。オブジェクトは多くの型を持つことができ、大きく異なるオブジェクトが型を共有できます。オブジェクトのインターフェースの一部が 1 つの型によって特徴付けられ、他の部分が別の型によって特徴付けられる場合があります。同じ型の 2 つのオブジェクトは、それらのインターフェースの一部のみを共有する必要があります。インターフェイスには、他のインターフェイスをサブセットとして含めることができます。そのインターフェースがそのスーパータイプのインターフェースを含む場合、そのタイプは別のタイプのサブタイプであると言います。スーパータイプのインターフェースを継承するサブタイプについてよく話します。

インターフェイスは、オブジェクト指向システムの基本です。オブジェクトは、そのインターフェイスを介してのみ認識されます。オブジェクトについて何かを知る方法や、インターフェイスを介さずにオブジェクトに何かを依頼する方法はありません。オブジェクトのインターフェースは、その実装について何も述べていません。オブジェクトが異なれば、自由にリクエストを異なる方法で実装できます。

于 2013-06-20T15:12:14.983 に答える