试图从实例化类中的抽象类调用静态方法。这是我正在尝试做的事情的原始编码示例,但不确定如何去做。
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/