[英]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) {
您似乎正在尝试将多态与静态方法一起使用,但这不是一个好主意,因为静态方法是相对于类的。
c.onCreate();
您不能以这种方式直接从类中调用方法,因为c
是Class
对象实例,并且没有这种方法。 它与调用不同:
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.