在Java中传递抽象类

在Java中传递抽象类,java,parameter-passing,abstract-class,Java,Parameter Passing,Abstract Class,试图从实例类中的抽象类调用静态方法。这是一个基本的编码示例,说明了我正在尝试做的事情,但不确定如何进行 DataSource myDataSource = new DataSource(); DataAdapterTest.initialize(myDataSource); public abstract class DataAdapterTest extends DataAdapter { public static void initialize(DataSource d) {

试图从实例类中的抽象类调用静态方法。这是一个基本的编码示例,说明了我正在尝试做的事情,但不确定如何进行

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();
    }
}
DataSource myDataSource=newdatasource();
DataAdapterTest.initialize(myDataSource);
公共抽象类DataAdapterTest扩展了DataAdapter{
公共静态无效初始化(数据源d){
d、 addDataAdapter(DataAdapterTest.class);
}
公共静态void onCreate(){
这里有什么事吗
}
}
公共类数据源{
公共无效addDataAdapter(c类){
c、 onCreate();
}
}

您的问题不清楚。我会回答我想问题是什么

签名编译错误 我猜您有以下编译错误:

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

只需为
addDataAdapter()使用更宽的签名即可。

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

DataAdapterTest.onCreate();
您应该传递类的实例而不是
对象,并使用实例方法而不是静态方法。在这方面,很难给出建议,因为我们不知道你想要实现什么

设计问题 无需
参数 你评论道:


我需要数据源能够调用 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
的目的是什么?如果没有子类的实例,您不能使用任何继承的内容。

IMO,您的问题不清楚。在方法签名中使用抽象类没有问题;唯一真正的问题是不能实例化(即
new
)抽象类。“真正的问题”似乎是关于
之间的[co]差异,这与
列表
不能与
列表
赋值的原因实际上是相同的——在任何情况下,都包括相关的[compiler]错误。
对象不能以这种方式使用(除了反思,这可能是处理你正在做的事情的一种非常混乱的方式)。因此,您需要告诉我们更多有关您正在尝试执行的操作。我不确定如何实现我正在尝试执行的操作。我在上面的代码中添加了两行代码,以帮助阐明该过程。只需将抽象类的非实例引用传递给方法,以调用传递的抽象类的静态方法。@nuebKitsune问题是使用静态方法意味着您了解该类。在这个过程中,该类不能是动态的。您为什么需要这样的东西?我需要数据源能够调用由DataAdapter类扩展的各种DataAdapter抽象类的方法;我不需要DataAdapter类的实例,因为我不需要nt必须在Android项目中的活动类之间管理该类的一个或多个实例。我之所以需要DataSource类来访问DataAdapter类,是因为在DataSource中调用了一个方法,该方法需要DataAdapter抽象类采取操作来完成。@nuebKitsune但为什么在这种情况下这样做呢一种通用方法?您是否确实有几个不同的类扩展了
DataAdapter
?如果没有,您当然可以使用
DataAdapterTest.onCreate();
。如果是,那么您将如何使用静态代码?Downvoter,请注意发表评论,以便在出现问题时改进我的答案。
DataAdapterTest.onCreate();
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();
    }
}