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

您不能以这种方式直接从类中调用方法,因为 cClass对象实例,并且没有这样的方法。
它与调用不同:
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 - M2Eclipse 显示错误,但 Maven 编译正常

java - 如何在使用 Thumbnailator 调整图像大小时用白色替换黑色背景?

r - 名称对应于现有函数名称的函数参数的默认值

c++ - C++错误C2660:函数没有3个参数

vba - 将数组传递给 ParamArray

java - Play 框架 2.1 中的 Kerberos 身份验证

java - Spring-将 XML 集成到 Java

java - 对于像setter这样简单的东西,使用接口(interface)还是抽象类更好?

c++ - OOP-抽象类类型,在基类和派生类中初始化变量

java - 任何人都可以解释以下代码的工作......?