gpt4 book ai didi

java - 对正确使用java泛型感到困惑

转载 作者:行者123 更新时间:2023-12-01 05:05:59 25 4
gpt4 key购买 nike

我遇到了一个问题,我不知道如何继续前进。我有一个包含以下代码的类

public class MyClass{

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

}

Provider 类在运行时传递,并且可以有不同的实现,所有它需要遵循上述约定 ? extends ValidationProvider .

在我的实现中,我提供了一个属性,用户可以在其中传递提供程序名称类,并基于该属性我需要继续前进。为了继续前进,我需要使用依赖注入(inject)机制中的构建来获取提供程序类的实例喜欢

 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 的不同实现进行配置,我从您的语法中假设它是一个父类(super class)。我认为您不需要 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);

关于java - 对正确使用java泛型感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12660675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com