我碰到了一个我不确定如何前进的地方。我有一个带有以下代码的课程

public class MyClass{

  private Class<? extends ValidationProvider> providerClass;
  //getter ans setter

}


Provider类在运行时传递,为此可以有不同的实现,它需要遵循上述合同? extends ValidationProvider

在我的实现中,我提供了一个属性,用户可以通过该属性传递提供程序名称类,并基于此属性我需要继续前进。为了继续前进,我需要使用内置依赖注入机制(例如,

 public class MyClass{

      private Class<? extends ValidationProvider> providerClass;
      //getter ans setter

      public void setProvider(){
         providerClass=container.getInstance("type","name");
      }
    }


container.getInstance("type","name");的签名为

 <T> T getInstance(Class<T> type, String name);


我不确定如何将类型传递给容器并获取提供程序类的实例(因为提供程序类具有签名<? extends ValidationProvider>)。

对于简单的用例,我可以喜欢

container.getInstance(String.class,"my constant");


但不确定如何针对我的用例
在这方面的任何帮助将不胜感激。

最佳答案

让我们退后一步...您的要求是MyClass应该可以用ValidationProvider的不同实现进行配置,我从您的语法中假设这是超类。我认为您不需要MyClass中的泛型来实现此目的:

public class MyClass{

    private ValidationProvider provider;

    public void setProvider(ValidationProvider _provider){
        this.provider = _provider;
    }
}


然后,例如(如果)通过在配置文件中具有确切的提供程序实现的全限定名称来实现配置,则可以按以下方式设置MyClass的实例:

...
String validatorClassName;
...
// Assign validatorClassName a value from a config file
...
ValidationProvider v = container.getInstance(Class.forName(validatorClassName), "blah");
myClass.setProvider(v);

07-28 02:13
查看更多