试图实现依赖注入的未知类错误

时间:2018-07-02 13:24:15

标签: java generics dependency-injection

我正在使用泛型来使代码可重复使用并利用依赖注入。

我有两个接口: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.

1 个答案:

答案 0 :(得分:0)

我所做的摘要

我实现了Factory设计模式并创建了一个properties文件,该文件使我可以反映在所需的类中,而不必尝试使用通用的DataObject(或{{1} })类型。

解决方案的详细信息

使用属性文件D反映类,然后将其强制转换为类型"config.properties",这使我可以使用实现该接口的任何类(并在Objectimplementation中实现并设置为Factory文件)。然后,我将properties的所有实例重构为类型D,因为父接口是此处所需的抽象层,而不是通用的具体类。

为什么它不像我在问题中尝试过的那样

通用ObjectImplementation类型不适用于反射的原因是因为反射使用了运行时确定的具体类类型,并且通用D类型是在运行时指定的。因此,我试图在不正确使用反射的情况下反映类类型及其方法/实例,并且代码告诉我在需要该类类型时它是未知的。

与问题代码进行比较的代码示例

工作代码示例:

D