如何传递对抽象类Java的引用
我需要的是将引用(数据)传递给抽象类生成器。我可以在GeneratorA/GeneratorB的构造函数中传递引用,但我有更多的子类,效率很低。是如何将参考数据传递给ABSR的任何方法。类生成器?我只想从类生成器继承引用。。。如何传递对抽象类Java的引用,java,reference,abstract,Java,Reference,Abstract,我需要的是将引用(数据)传递给抽象类生成器。我可以在GeneratorA/GeneratorB的构造函数中传递引用,但我有更多的子类,效率很低。是如何将参考数据传递给ABSR的任何方法。类生成器?我只想从类生成器继承引用。。。 谢谢 抽象类可以有非抽象方法和构造函数 Data data = new Data("path"); //I read data from excel and save. This code is in Main. public abstract class Genera
谢谢 抽象类可以有非抽象方法和构造函数
Data data = new Data("path"); //I read data from excel and save. This code is in Main.
public abstract class Generator{
public abstract double[][] generate();
//here I need reference - data
}
public class GeneratorA extends Generator{
public double[][] generate(){
//first implementation - I want to work with data
}
}
public class GeneratorB extends Generator{
public double[][] generate(){
//second implementation - I want to work with data
}
}
您可以使用构造函数来设置子类中的值
或
如果出于某种原因,您不想将构造函数/非抽象方法添加到抽象类Generator
,您可以再添加一个扩展Generator
的类,其他子类可以扩展这个新类
您可以在新类中编写用于设置值的方法并使用它。您必须向抽象类添加构造函数。然后您只需在子类构造函数中调用
super(data)
请参见下面的代码:
public abstract class Generator{
Generator(....)
{
//set here
}
public abstract double[][] generate();
//here I need reference - data
}
根据您的描述,似乎所有生成器对象中都需要相同的数据引用。在这种情况下,您可以将数据作为静态字段存储在抽象类中,并访问子类的对象,如:
public abstract class Generator{
Data data;
public Generator(Data data) {
this.data = data;
}
public abstract double[][] generate();
//here I need reference - data
}
}
public class GeneratorA extends Generator{
public GeneratorA(Data data) {
super(data);
}
public double[][] generate(){
//first implementation - I want to work with data
}
}
public class GeneratorB extends Generator{
public GeneratorB(Data data) {
super(data);
}
public double[][] generate(){
//second implementation - I want to work with data
}
}
如果generate方法需要
数据
对象,则应将其作为参数传递。hmmm我认为我可以以某种方式从父类读取数据
。或者,您可以在父类中实现一个设置器
,该设置器将数据
存储在父类的字段中。在调用generate()
方法之前,您需要调用该setter…这些是非静态的内部类吗?如果是,您应该能够读取数据
,如果它是父类中的字段。但我同意Peter的观点,将数据
传递给generate()
。进行更改:public abstract double[][]生成(参数)
您可以继承此方法并传递所需的变量/引用(数据,无论您如何称呼它)。
public abstract class Generator{
static Data data;
public static void setData(Data data){
Generator.data=data;
}
public abstract double[][] generate();
}
Data data = new Data("path");
Generator.setData(data);
public class GeneratorA extends Generator{
public double[][] generate(){
//here you can work with data..
}
}