java - 将泛型类型参数与 Java 中的接口(interface)相结合

标签 java generics inheritance

与许多继承问题一样,我发现很难解释我想做什么。但是一个快速(但奇特)的例子应该可以解决问题:

public interface Shell{


    public double getSize();

}

public class TortoiseShell implements Shell{
     ...
     public double getSize(){...} //implementing interface method
     ...
     public Tortoise getTortoise(){...} //new method
     ...
}

public class ShellViewer<S extends Shell>{

     S shell;

     public ShellViewer(S shell){
         this.shell = shell;
         ...
     }

}

public class TortoiseShellViewer<T extends TortoiseShell> extends ShellViewer{

    public TortoiseShellViewer(T tShell){
         super(tShell); //no problems here...
    }

    private void removeTortoise(){
        Tortoise t = tShell.getTortoise(); //ERROR: compiler can not find method in "Shell"
        ...
    }
}

编译器无法识别我想为 getTortoise() 使用特定的 Shell 实现。我哪里出错了?

最佳答案

根据您在此处提供的内容,问题在于:

public class TortoiseShellViewer<T extends TortoiseShell> extends ShellViewer

没有正确指定 ShellViewer(通用)。应该是:

public class TortoiseShellViewer<T extends TortoiseShell> extends ShellViewer<T>

关于java - 将泛型类型参数与 Java 中的接口(interface)相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5095612/

相关文章:

java - 返回 2 个字符串的连接 java

swift - 我可以使 Swift 枚举泛型,以便我可以使用它的 case 来推断泛型类的类型吗?

c# - 在运行时获取继承的对象类型

java - 如何在 Java 中隐藏静态变量

java - Spring注释表单验证有问题吗?

Java 构造函数链接并避免代码重复

c# - 定义一个实现 + 运算符的泛型

java - 错误: Constructor Room in class Room cannot be applied to given types

java - 避免在基于通用工厂的 MVP 框架中进行强制转换

java - 在 map 上强制执行泛型