我正在使用泛型来使代码可重复使用并利用依赖注入。
我有两个接口:DataParserImplementation和ObjectImplementation。我有实现每个类的类:SalesRepbyId实现DataParserImpl(它将数据解析为对象并将这些对象放入集合中)。 SalesRep实现Objectimpl(这是特定数据集的对象)。
我正在尝试获取它,以便可以选择在SalesRepbyId类中使用哪种Objectimpl,以便删除耦合。
我知道有一种叫做反射的东西是我需要使用的方法。我还听说过“工厂模式”和“属性文件”,可以执行我想做的事情。其中很多都令人困惑,因此请像我五岁时那样解释一下。
这是它停止工作的代码:
编辑:基于注释的修订:我想通过类通过通用接口将其传递给构造函数,并使用通用类型来指定类使用的DataObject(D)的类型。当我尝试使用它而不是具体的实现类时,出现错误。我找不到有关此错误的任何信息。
public class SalesRepbyId<D extends ObjectImplementation> implements DataParserImplementation<Map<String,D>> {
private FileParserImplementation<ArrayList<String[]>> FileParser;
private D dataObject;
public SalesRepbyId(FileParserImplementation<ArrayList<String[]>> FileParser,D d){
this.FileParser = FileParser;
this.dataObject = d;
}
@Override
public Map<String, D> Parse() {
try{
//reads the file and returns an array of string arrays
ArrayList<String[]> Salesrep_contactlist = FileParser.ReadFile;
//here it still says "Unknown Class." that's the problem
Map<String, dataObject> SalesrepByIdMap = new HashMap<>();
//I want to be able to put in any class that implements
//dataObject into this class and have it run the same way.
答案 0 :(得分:0)
我实现了Factory
设计模式并创建了一个properties
文件,该文件使我可以反映在所需的类中,而不必尝试使用通用的DataObject
(或{{1} })类型。
使用属性文件D
反映类,然后将其强制转换为类型"config.properties"
,这使我可以使用实现该接口的任何类(并在Objectimplementation
中实现并设置为Factory
文件)。然后,我将properties
的所有实例重构为类型D
,因为父接口是此处所需的抽象层,而不是通用的具体类。
通用ObjectImplementation
类型不适用于反射的原因是因为反射使用了运行时确定的具体类类型,并且通用D
类型是在运行时指定的。因此,我试图在不正确使用反射的情况下反映类类型及其方法/实例,并且代码告诉我在需要该类类型时它是未知的。
工作代码示例:
D