两个泛型参数具有相同上限时的java Unchecked cast警告
我有一个对其他泛型类进行操作的泛型类:
public abstract class DistributionService<TInput extends DistributionInputBase,
TContextProvider extends DistributionContextProviderBase,
TContext extends DistributionContextBase,
TStrategy extends DistributionStrategyBase,
TResult extends DistributionResultBase> {
private final TContextProvider _distributionContextProvider;
public DistributionService(TContextProvider distributionContextProvider){
_distributionContextProvider = distributionContextProvider;
}
//@SuppressWarnings("unchecked")
public TResult GetResult(TInput input, TStrategy[] distributionStrategies){
//unchecked cast warning
TContext context = (TContext)_distributionContextProvider.getContext(input);
TResult result = null;
for (TStrategy strategy: distributionStrategies){
//unchecked cast warning
result = (TResult)strategy.Distribute(context);
if (result != null)
break;
}
return result;
}
}
以及在约束(DistributionContextBase
,DistributionResultBase
)中共享相同基类型的TContextProvider和TStrategy类型:
public abstract class DistributionContextProviderBase<TContext extends DistributionContextBase, TInput extends DistributionInputBase> {
public abstract TContext getContext(TInput input);
public abstract int getOpenIssueCount(Workforce workforce);
}
public abstract class DistributionStrategyBase<TContext extends DistributionContextBase, TResult extends DistributionResultBase> {
protected WorkforceDistributionContext _context;
protected String GetReason(TResult result){
String reason = GetReasonSub(result);
if (_context.HasRules()){
reason += "\nRule(s) applied: " + _context.GetRules();
}
return reason;
}
public abstract TResult Distribute(TContext context);
protected abstract TResult DistributeSub(TContext context);
protected abstract String GetReasonSub(TResult result);
}
但我收到了DistributionService类评论中标记的“unchecked cast”警告。对我来说,似乎总是保证所有类型都将从约束中使用的基类派生:
TContext
在DistributionService
=TContext
在DistributionContextProviderBase
TResult
在DistributionService
=TResult
在DistributionStrategyBase
我知道用@SuppressWarnings(“unchecked”)来消除这个警告是不可能的,但我很好奇是否还有其他正确的方法
共 (0) 个答案