java - 泛型返回类型不起作用

标签 java generics visitor-pattern

我正在看例子。

public interface Visitor<T> {
    public void visit(T e);
}

class Sum<T extends Integer> implements Visitor<T> {

    private int sum = 0;



    @Override
        public void visit(T element) {
            sum += element;
        }

        public T value() {
            return sum;
        }

}

return 语句 T value() return sum 给出错误,指出类型不匹配:无法从 int 转换为 T。为什么会这样以及如何解决问题。

最佳答案

你的情况有两个问题:

  1. T extends Integer 并不完全有效,因为 Integer 无法扩展,即它是一个 final 类。因此,您可以安全地将类声明更改为

    class Sum implements Visitor<Integer> { ...
    
  2. 其次,T value() 方法不是接口(interface)的一部分,因此不需要(不应该)是 T 类型。您可以安全地将其替换为 public int value()public Integer value()

因此,生成的代码将如下所示:

class Sum implements Visitor<Integer> {
    private int sum = 0;

    @Override
    public void visit(Integer element) {
        sum += element.intValue();
    }

    public int value() {
        return sum;
    }
}

关于java - 泛型返回类型不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8959263/

相关文章:

java - 我需要在数据库中搜索 "customer",这里有什么好的设计?

c# - 使用简单注入(inject)器在 C# 中实现域事件处理程序模式

java - jsqlparser 评估条件

java - 使用 Spring Boot 在 Quartz 中 Autowiring 多个作业不起作用

java - 如何确定对象属性断言的主语和客体?

java - 每次用 java 检查一个框时更新所有 TextFields

java - 调用静态泛型方法

java - 通用多维数组转换函数

javascript - 网站上每个页面的不同计数器值

当访问者类型取决于访问者类型时,Java 访问者模式