java - 在 Java 中传递抽象类

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

最佳答案

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

签名编译错误

我猜你有以下编译错误:

The method addDataAdapter(Class) in the type Main.DataSource is not applicable for the arguments (Class)

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

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

onCreate 调用

您似乎在尝试对静态方法使用多态性,这不是一个好主意,因为静态方法是相对于类而言的。

c.onCreate();

你不能用这种方式直接调用类的方法,因为c是一个Class对象实例,没有这样的方法。 它与调用不同:

DataAdapterTest.onCreate();

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

设计问题

不需要Class参数

你评论了:

I need the DataSource to be able to call a method of varying DataAdapter abstract classes

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

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

关于java - 在 Java 中传递抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096792/

相关文章:

java - 在 url 中插入双引号时,索引处的查询中存在非法字符

java - spring中创建ThreadPoolExecutor会导致内存泄漏吗?

java - 是否有工具可以将数据库表反向工程为 JPA Groovy 实体类?

c# - 如何强制派生类包含具有默认值的某些属性

java - 异常: Caused by: org. springframework.beans.factory.BeanCreationException:创建名称为 'httpPutFormContentFilter'的bean时出错

jenkins - 如何将参数传递给 Hudson 作业的 shell 命令

Python 和 Java 参数传递

C 参数设置但未使用

java - 这段代码在 Java 中有效吗?

c++ - 为什么这个类是抽象的?