我可能不在这里,但是我对泛型的理解有些不同。

如果我错了,我要有人纠正我。

海事组织-

这是一个非常令人困惑的结构。 您具有无限引用的Shape子类,看起来像。

您的Shape接口的使用方式与HashMap相同,但是我从未见过HashMap可以完成您想做的事情,最终您必须让X成为Shape中的类。 否则你在做HashMap

如果您始终希望X成为接口的“ IS A”关系,则不会发生。 那不是泛型的用途。 泛型用于将方法应用于多个对象,并且接口不能是对象。 接口定义了客户端和类之间的契约。 您所能做的就是说您将接受任何实现Runnable的对象,因为使用Runnable接口方法需要全部或某些方法。 否则,如果您未指定并将其定义为,则您的类与客户端之间的合同可能会产生意外的行为,并导致错误的返回值或引发异常。

例如:

public interface Animal {

void eat();

void speak();

}

public interface Dog extends Animal {

void scratch();

void sniff();

}

public interface Cat extends Animal {

void sleep();

void stretch();

}

public GoldenRetriever implements Dog {

public GoldenRetriever() { }

void eat() {

System.out.println("I like my Kibbles!");

}

void speak() {

System.out.println("Rufff!");

}

void scratch() {

System.out.println("I hate this collar.");

}

void sniff() {

System.out.println("Ummmm?");

}

}

public Tiger implements Cat {

public Tiger() { }

void eat() {

System.out.println("This meat is tasty.");

}

void speak() {

System.out.println("Roar!");

}

void sleep() {

System.out.println("Yawn.");

}

void stretch() {

System.out.println("Mmmmmm.");

}

}

现在,如果您上过此类,您可以期望您可以始终调用“ speak()”和“ sniff()”

public class Kingdom {

public Kingdom(X dog) {

dog.toString();

dog.speak();

dog.sniff();

}

}

但是,如果执行此操作,则永远无法调用“ speak()”和“ sniff()”

public class Kingdom {

public Kingdom(X object) {

object.toString();

object.speak();

object.sniff();

}

}

结论:

泛型使您能够对各种对象(而不是接口)使用方法。 您最后进入通用类必须是一种对象。

java接口作为参数_java-如何强制将通用类型参数作为接口?相关推荐

  1. java接口作为参数_JAVA:将类、抽象类、接口当成方法的参数传入

    将类当成参数传入方法,其实就是将类的对象传入方法,如果是抽象类,其实就是将抽象类的子类的对象传入方法,如果是接口,其实就是将接口实现类的对象传入方法. 因为抽象类和接口是不能实例化成对象的,所以必须找 ...

  2. java 接口 this参数_Java BiFunction 接口实例

    原标题:Java BiFunction 接口实例 www.baeldung.com/java-bifunction-interface 1. 简介 Java8 引入了函数式编程,可以把函数作为参数传入 ...

  3. java -jar 默认参数_JAVA入门学习指南,建议收藏

    如果你不懂Java 并且想认真学习接触了解一下Java的语法,建议把这篇文章收藏了,多看几遍,应该可以初步掌握Java 大部分基础的语法 . 让我们出发吧!ps:本文有点长,耐心阅读 . 〇,编程环境 ...

  4. java变长参数_Java可变长度参数

    术语"varargs"是"variable-length arguments"(可变长度参数)的缩写. 可变长度参数声明一个接受可变数量的参数(或参数)的方法或 ...

  5. linux下java命令行参数_Java调用Linux命令行

    Java调用Linux命令行 Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...

  6. java 获取接口的注解_java反射注解妙用-获取所有接口说明

    前言 最近在做项目权限,使用shiro实现restful接口权限管理,对整个项目都进行了重构.而权限管理需要用到所有的接口配置,包括接口url地址,接口唯一编码等.想要收集所有的接口信息,如果工程接口 ...

  7. java 命令行参数 _java命令行参数

    原标题:java命令行参数 命令行参数就是main方法里面的参数String[] args他就是一个数组,args只是数据类型的一个名称,就是一个数组的变量,名称无所谓,类型没变就行了.这个就是程序的 ...

  8. java方法可选参数_Java可选参数

    java方法可选参数 在Java类中设计方法时,某些参数对于其执行而言可能是可选的. 无论是在DTO,胖模型域对象还是简单的无状态服务类中,可选方法参数都是常见的. 从本文中, 您将学习如何在Java ...

  9. java 什么是参数_java中的参数是什么?

    本篇文章介绍了Java中什么是参数,以及参数的两种类型及他们之间的关系,希望对学习Java开发的同学有帮助. java中的参数是什么? 参数分两种:一种叫形式参数,一种叫实际参数 方法名后面括号里面用 ...

最新文章

  1. android 分组 listview,Android实现的ListView分组布局改进示例
  2. .pth is a zip archive (did you mean to use torch.jit.load()?)
  3. Modelsim command line 传参数到 .do 文件
  4. WPFの操作文件浏览框几种方式
  5. Windows环境中jdk的下载、安装与配置
  6. maven 搭建私有仓库
  7. 问题记录 | 记录PIL中Image.save的一个坑
  8. 小众却非常好用的文件同步备份工具-FileYee
  9. Python3.7安装numpy与scipy库(win10)
  10. 分布式电源选址定容与优化配置MATLAB程序基于多目标粒子群算法
  11. 2021年的放假安排正式官宣!五一连休5天哦!
  12. C/C++程序固定单核CPU运行(几个示例)
  13. Prege(图计算框架)
  14. java交换kv的值_以.kv语言描述OSC
  15. 符合lft, rgt的无限分类算法的Java生成代码
  16. anaconda安装配置步骤、报错解决
  17. 神经网络实现手写数字识别(MNIST)
  18. linux下登录ftp
  19. 由于没有公钥,无法验证下列签名:一步解决
  20. input/print,pycharm设置文件抬头

热门文章

  1. TCP半连接队列(syns queue)和全连接队列(accept queue)
  2. Memory Translation and Segmentation(内存转换与段)
  3. 为什么你的发行版仍然在使用“过时的”Linux 内核? | Linux 中国
  4. LaTex在Linux下编写高质量的文档
  5. Python基础学习总结、学习展望
  6. toad软件 insert批量操作_AE创建、PR制作,动态字幕跨软件也能批量操作
  7. arraylist、map、queue、stack总结
  8. oracle big table1,关于Big_Table脚本的一些有关问题
  9. access中dbs和dbms_DB、DBS、DBMS之间有什么关系?
  10. python回归结果可视化图表解读_一个基于可视化理论的完美Python图表,快学起来