繁体   English   中英

在Java中传递抽象类

[英]Passing Abstract Class in Java

试图从实例类内部的抽象类中调用静态方法。 这是我要执行的操作的原始编码示例,但不确定如何执行。

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();
    }
}

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

签名编译错误

我猜您有以下编译错误:

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

只需对addDataAdapter()使用更大的签名

public void addDataAdapter(Class<? extends DataAdapter> c) {

onCreate通话

您似乎正在尝试将多态与静态方法一起使用,但这不是一个好主意,因为静态方法是相对于类的。

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的目的是什么? 没有子类的实例,您不能使用任何继承的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM