如何最好地避免javabean使用通配符
我的服务中使用了以下提供商:如何最好地避免javabean使用通配符,java,generics,dependency-injection,wildcard,Java,Generics,Dependency Injection,Wildcard,我的服务中使用了以下提供商: public interface DataProvider { public String safeDump(); } public interface FieldDataProvider<V> extends DataProvider { public <T> T getField(int field, Class<T> type); public void setRawField(int field,
public interface DataProvider {
public String safeDump();
}
public interface FieldDataProvider<V> extends DataProvider {
public <T> T getField(int field, Class<T> type);
public void setRawField(int field, V value);
}
公共接口数据提供程序{
公共字符串safeDump();
}
公共接口FieldDataProvider扩展了DataProvider{
公共T getField(int字段,类类型);
公共无效setRawField(整型字段,V值);
}
服务如下所示
public interface Service<T extends DataProvider>{
public void handleData(T dataProvider);
}
公共接口服务{
公共无效handleData(T数据提供程序);
}
如何消除通配符来注入实现此服务的JavaBean
// to inject
public class ServiceBean implements Service<FieldDataProvider<?>>{
public void handleData(FieldDataProvider<?> fieldDataProvider){
String header = fieldDataProvider.getField(1, String.class)
}
}
//注入
公共类ServiceBean实现服务在服务中提供者是什么?T
来自于public T getField(int字段,类类型)代码>?@JacobG。抢手货已编辑:将提供程序
更改为数据提供程序
。它是DataFieldProvider的基本接口。T是包含在方法中的一种类型(将返回类型定义为与第二个参数的类相等的类型),您是否也可以发布DataProvider
接口?@JacobG。完成,但它不应该与整体结构密切相关。即使使用Java8,它对我来说也可以编译。可能尝试构建->重建项目
或文件->使缓存无效/重新启动