Java 泛型无法正常工作,或者我错过了一些东西
告诉我为什么不能像这样为泛型声明上键?:Java 泛型无法正常工作,或者我错过了一些东西,java,Java,告诉我为什么不能像这样为泛型声明上键?: public R computeMove(Map<K extends String,V extends Integer> c); public class ProbabilityStrategy implements Strategy<String,Integer,Map<String, Integer>,GameFigures>{ @Override public GameFigu
public R computeMove(Map<K extends String,V extends Integer> c);
public class ProbabilityStrategy implements Strategy<String,Integer,Map<String, Integer>,GameFigures>{
@Override
public GameFigures computeMove(Map<String, Integer> c){
Collection<Integer> values=c.values();
Stream<Integer> stream=values.stream();
Optional<Integer> userMaxFigureMoves=stream.max(Integer::compare);
return null;
}
}
代码可以工作,但如果在接口策略中声明了K和V的上界,为什么会出现未检查的异常?所以,Map
应该像Map
如果将类别代码更改为:
public class ProbabilityStrategy implements Strategy{
@Override
public GameFigures computeMove(Map c){
Collection values=c.values();
Stream stream=values.stream();
Optional userMaxFigureMoves=stream.max(Integer::compare);//<-- compiler error
return null;
}
}
公共类概率策略实现策略{
@凌驾
公共游戏人物计算机移动(地图c){
集合值=c.值();
Stream=values.Stream();
可选的userMaxFigureMoves=stream.max(Integer::compare);//找到了答案,我在实现接口策略时没有声明泛型类型
接口的正确实现:
public R computeMove(Map<K extends String,V extends Integer> c);
public class ProbabilityStrategy implements Strategy<String,Integer,Map<String, Integer>,GameFigures>{
@Override
public GameFigures computeMove(Map<String, Integer> c){
Collection<Integer> values=c.values();
Stream<Integer> stream=values.stream();
Optional<Integer> userMaxFigureMoves=stream.max(Integer::compare);
return null;
}
}
公共类概率策略实现策略{
@凌驾
公共游戏人物计算机移动(地图c){
集合值=c.值();
Stream=values.Stream();
可选userMaxFigureMoves=stream.max(整数::比较);
返回null;
}
}
为什么要声明上限为final
类的类型变量K和V?你尝试过你的方法了吗?在我看来,Map c
是正确的,因为你的方法不能覆盖其他场景,例如Map
启用所有编译器警告,并注意它们。特别是关于“原始类型。”R扩展GameFigures
并且在重写方法中显示为GameFigures
,T扩展Map
并且显示为Map
,但是为什么,例如扩展String
的K
在Map
中不显示为其上限String
?它实际上看起来不像策略
应该为您的用例提供任何类型参数;它确实应该是接口策略{PublicGameFiguresComputeMove(MapC);}
。主持人删除了您的原始答案,因为您继续将元评论重新添加到您的答案中,社区随后不得不再次清理。使用添加的相同元评论重新发布答案是不合适的行为方式。抱歉,此类评论在答案中没有位置。我已锁定此答案以防止这类的进一步编辑。
public class ProbabilityStrategy implements Strategy<String,Integer,Map<String, Integer>,GameFigures>{
@Override
public GameFigures computeMove(Map<String, Integer> c){
Collection<Integer> values=c.values();
Stream<Integer> stream=values.stream();
Optional<Integer> userMaxFigureMoves=stream.max(Integer::compare);
return null;
}
}