在Java中传递抽象类

时间:2014-04-16 00:18:44

标签: java parameter-passing abstract-class

尝试从实例化类中的抽象类调用静态方法。这是我尝试做的原始编码示例,但不确定如何去做。

DataSource myDataSource = new DataSource();
DataAdapterTest.initialize(myDataSource);

public abstract class DataAdapterTest extends DataAdapter {
    public static void initialize(DataSource d) {
        d.addDataAdapter(DataAdapterTest.class);
    }

    public static void onCreate() {
        does something here
    }
}

public class DataSource {
    public void addDataAdapter(Class<DataAdapter> c) {
        c.onCreate();
    }
}

1 个答案:

答案 0 :(得分:0)

你的问题不清楚。我会回答我猜的问题。

签名编译错误

我猜你有以下编译错误:

  

方法中的addDataAdapter(Class)方法   Main.DataSource不适用于参数   (类)

只需为addDataAdapter()

使用更宽的签名
public void addDataAdapter(Class<? extends DataAdapter> c) {

onCreate call

您似乎试图将静态方法用于多态,这不是一个好主意,因为静态方法是相对于类的。

c.onCreate();

您不能以这种方式直接从类中调用方法,因为cClass对象实例,并且没有这样的方法。 这与调用不同:

DataAdapterTest.onCreate();

您应该传递该类的实例而不是Class对象,并使用实例方法而不是静态方法。在这方面,很难提供建议,因为我们不知道你想要达到的目的。

设计问题

不用Class参数

您评论道:

  

我需要DataSource才能调用变化的方法   DataAdapter抽象类

您在此处提供的代码仅使用一个扩展DataAdapter的类。如果你需要几个,那么在你的最小例子中至少放2个。 截至目前,我认为没有必要在这里传授课程。您还可以执行以下操作:

DataSource myDataSource = new DataSource();
DataAdapterTest.initialize(myDataSource);

public abstract class DataAdapterTest extends DataAdapter {
    public static void initialize(DataSource d) {
        d.addDataAdapter();
    }

    public static void onCreate() {
        //does something here
    }
}

public class DataSource {
    public void addDataAdapter() {
        DataAdapterTest.onCreate();
    }
}

不必要的静态东西

如果DataAdapterTest类中的所有内容都是静态的,那么扩展DataAdapter的目的是什么?如果没有子类的实例,则不能使用任何继承的东西。