【问题标题】:Implement a single Java class/interface, which references multiple classes实现单个 Java 类/接口,它引用多个类
【发布时间】:2018-05-11 10:41:18
【问题描述】:

问题陈述: 我们有多个类文件(~200+),每个类文件都实现了不同的方法,有些还使用彼此的方法来实现自己的方法。

我们希望在我们的代码中调用这些类方法中的多个(约 20-30 个),并让它们提供诸如写入 UI 网页和从网页读取之类的功能。

由于我们希望简化这个过程,我们想要一个包含所有这些多个类引用(~200+)的单个类/接口,我们只需要在我们的代码中导入/包含这个单个类/接口,然后使用它来引用类文件中的所有方法。

问题: 以上可能吗?如果是这样,如何 - 通过使用类或接口或其他东西?

我在这里提供了我们尝试过的示例和信息:Implement multiple classes in the same interface in Java?

基本上我们都试过了

  1. 创建一个声明了所有其他类的类
  2. 创建一个接口,该接口具有跨多个类的实现(上述约 200 多个类)
  3. 实现了一个类和一个接口

这些方法似乎都行不通。

作为我们想要的代码的要点,下面提供了一个示例。

示例这不是正确的代码或实现,只是想提供一个我们想要在代码中做什么的示例) :

我有 2 个班级,名为“ABC_FamilyGivenName”和“ABC_DOBGender”。 我创建了一个界面“Common”。

我想在“Application”类的代码中使用上述两个类中的方法。

在当前的实现中,Java 希望我为 ABC_FamilyGivenNameABC_DOBGender 添加一个 @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();
    }
}

【问题讨论】:

  • 我不太了解您的代码的一件事是,您有一个具有性别和姓氏的“通用”工具。接口用于为相似但不同的类实现通用方法。因此,两者都有一个类,或者每个类都有两个单独的接口会更有意义。您的接口强制两个实现类具有所有被覆盖的抽象方法。
  • @SynchroDynamic 是的,如前所述,这正是我们想要做的,但不是解决我们问题的方法。我提供的代码没有做我们需要的解决问题的方法,并且希望我们能够以一种使用户更容易使用并且不记住要导入然后实例化的多个类的方式来实现它的想法作为新的()
  • 那么在您的实例中,根据我认为您正在尝试做的事情,您应该考虑构建组件类。这样您就可以构建接口来获取特定的对象类型。我很乐意举一个例子。它可能会有所帮助。可能不会。

标签: java class interface


【解决方案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;
    }
}

就像我之前说的,这可以用一种更复杂的方式来实现,但也会让用户对这么多类的编码稍微容易一些。如果这不是你想走的路线,我可以删除这条路线并采取新的方法。如果你想让我扩展这个想法,我也可以这样做。

我希望这会有所帮助。

编辑:

如果您只想调用 Person 并开始使用组件方法,这就是我所指的。

    public class Person {

    DOBGender dobGender;
    FamilyGivenName fgn;

    public Person() {
        dobGender = new DOBGender();
        fgn = new FamilyGivenName();
    }

    public DOBGender getDobGender() {
        return dobGender;
    }


    public FamilyGivenName getFgn() {
        return fgn;
    }

}

【讨论】:

  • 谢谢,这帮了很多忙。有没有办法让最终用户更简单?基本上,可以删除构造函数,只声明和使用 2 个类/方法?
  • 您总是可以删除构造函数,然后使用设置器设置属性。如果您愿意,也可以在 Person 类中实例化它们。这将允许您调用 Person 类,它会依次创建这两个对象。我想你会得到你正在寻找的结果。
  • 我为 person 添加了一个额外的类概念。这将允许您立即开始使用这些组件。这里唯一的警告是,如果你这样做,将来如果你必须改变一些东西,它会更加僵化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多