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;
       }
}
代码可以工作,但如果在接口策略中声明了KV的上界,为什么会出现未检查的异常?所以,
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;
       }
}