2017-11-28 3 views
2

問題文: それぞれ異なるメソッドを実装し、それぞれ独自のメソッドを実装する複数のクラスファイル(~200 +)があります。メソッド。複数のクラスを参照する単一のJavaクラス/インタフェースを実装する

コードでこれらのクラスメソッド(〜20-30)を複数呼び出すと、UI Webページへの書き込みやWebページからの読み込みなどの機能を提供することができます。

このプロセスを簡単にしたいので、これらの複数のクラス参照(〜200 +)を含む単一のクラス/インタフェースが必要です。この単一のクラス/インタフェースをコードにインポート/それを使ってクラスファイルのすべてのメソッドを参照します。

質問: 上記は可能ですか?もしそうなら、どうやってクラスやインターフェースなどを使うのでしょうか?

私は例と我々はここにしようとしているかの情報を提供していますImplement multiple classes in the same interface in Java?

は基本的に、我々はANの作成

  • それで宣言された他のすべてのクラスを持つクラスの作成

    1. を試してみました複数のクラスに渡って実装されているインターフェイス(上記の〜200 +)
    2. クラスとインターフェイスを実装しました

    いいえ、うまくいかないようです。

    コードで欲しいものの要点として、以下の例を挙げてください。

    これはちょうど私たちは、コードで何をしたいのかの例を提供したかった、右のコードや実装ではありません):

    私は「ABC_FamilyGivenNameと呼ばれる2つのクラスを持っています"&" ABC_DOBGender "。 私は、インターフェイス "コモン"を作成しました。

    上記の両方のクラスのメソッドをクラス「アプリケーション」のコードで使用したいとします。現在の実装では

    、Javaは私が ABC_DOBGender ABC_FamilyGivenName & の両方に@Overrideを追加したいです。 これは〜500のメソッドがある場合にはオーバーヘッドを再度作成するので、c〜200クラスファイルのすべて〜500をオーバーライドする必要があります ??

    ***INTERFACE***: 
    
    public interface Common { 
        void ABC_GivenNames(); 
        void ABC_FamilyNames(); 
        void ABC_Gender(); 
        void ABC_BirthDay(); 
    } 
    
    
    
    ***IMPLEMENTATION CLASSES***: 
    
    **ABC_FamilyGivenName** 
    public class ABC_FamilyGivenName extends Base implements Common { 
    
        public void ABC_GivenNames(){ 
         // Implementation code 
        } 
    
        public void ABC_FamilyNames(){ 
         // Implementation code 
        } 
    } 
    
    **ABC_DOBGender** 
    public class ABC_DOBGender extends Base implements Common { 
    
        public void ABC_Gender(){ 
         // Implementation code 
        } 
    
        public void ABC_BirthDay(){ 
         // Implementation code 
        } 
    } 
    
    
    
    **USE IMPLEMENTED CLASS IN CODE**: 
    public class Application extends Base { 
    
        Common commonClass = new ABC_FamilyGivenName(); 
        /* *DO I NEED THIS? I THINK I DO, BUT CODE/JAVA SAYS I DO NOT* 
        * Common commonClass = new ABC_DOBGender(); 
        */ 
    
        public void ELP_C0050_PassportDetails(){ 
         commonClass.ABC_GivenNames(); 
         commonClass.ABC_FamilyNames(); 
         commonClass.ABC_DOB(); 
         commonClass.ABC_Gender(); 
        } 
    } 
    
  • +0

    私はあなたのコードをよく理解していませんが、ジェンダーとfamilynameが実装されている「共通」があることです。インターフェイスは、似たような異なるクラスに共通のメソッドを実装するために使用されます。したがって、どちらのクラスにも1つのクラス、またはそれぞれに2つの別々のインターフェイスを持つ方が理にかなっています。あなたのインターフェースは、両方の実装クラスにオーバーライドされたすべての抽象メソッドを強制します。 – SynchroDynamic

    +0

    @SynchroDynamicはいこれは私たちがやっていることだと思っていますが、私たちの問題の解決策ではありません。私が提供したコードは、私たちが問題の解決策として必要としていることを実行しておらず、ユーザーが使いやすく、インポートするために複数のクラスを覚えていないようにするために、 as new() – gagneet

    +0

    あなたのインスタンスでは、あなたがしようとしていることに基づいて、コンポーネントクラスを構築することを検討する必要があります。このようにして、特定のオブジェクト型を取得するためのインタフェースを構築できます。私は、例を挙げてうれしいです。それは助けるかもしれません。それはできません。 – SynchroDynamic

    答えて

    1

    これでもっと多くのことができますが、これは私が話していたことの非常に単純な例です。それらの上にインターフェイスを持つ代わりに、プラグインします。

    //Component Classes 
    
    public class DOBGender {//Has the specific methods you want 
    
    } 
    
    
    
    public class FamilyGivenName {//Has the specific methods you want 
    
    } 
    
    //Then just plug them in to this class 
    
    public class Person { 
    
        DOBGender dobGender; 
        FamilyGivenName fgn; 
    
        public Person(DOBGender dobGender, FamilyGivenName fgn) {//Plug them in 
         this.dobGender = dobGender; 
         this.fgn = fgn; 
        } 
    
        public DOBGender getDobGender() { 
         return dobGender; 
        } 
    
        public void setDobGender(DOBGender dobGender) { 
         this.dobGender = dobGender; 
        } 
    
        public FamilyGivenName getFgn() { 
         return fgn; 
        } 
    
        public void setFgn(FamilyGivenName fgn) { 
         this.fgn = fgn; 
        } 
    } 
    

    これは私が以前に言ったように、これははるかに複雑な方法で行うことができますが、ユーザーにとって非常に多くのクラスのコーディングもやりやすくなります。これがあなたが行きたいルートでない場合、私はこれを削除して新しいアプローチをとることができます。あなたが私にこのアイデアを広げてもらいたいなら、私もそれをすることができます。

    こちらがお役に立てば幸いです。

    EDIT:

    これは、あなただけの人を呼び出してコンポーネントのメソッドを使用して起動したい場合は、私が言及していますものです。

    +0

    ありがとう、これは多くの助けとなりました。これをエンドユーザーにとってよりシンプルにする方法はありますか?基本的には、コンストラクタを削除して、2つのクラス/メソッドを宣言して使用することは可能ですか? – gagneet

    +0

    いつでもコンストラクタを削除してから、セッタを使ってプロパティを設定できます。また、必要に応じてPersonクラス内でインスタンス化することもできます。これにより、Personクラスを呼び出すことができます。Personクラスは、2つのオブジェクトを作成します。あなたは私が思っている結果を得るでしょう。 – SynchroDynamic

    +1

    私は人にクラスコンセプトを追加しました。これにより、コンポーネントをすぐに使用できるようになります。ここでの唯一の警告は、あなたがこのようにするならば、将来的に何かを変えなければならない場合は、はるかに厳格になります。 – SynchroDynamic

    関連する問題