我想要一个类对象,但是我想要强制它所代表的任何类来扩展类A和实现接口B。

我能做到:

Class extends ClassA>

或:

Class extends InterfaceB>

但我不能两者兼得。有办法吗?

实际上,你可以做你想做的。如果要提供多个接口或类加接口,则必须使通配符看起来像这样:

请参阅sun.com上的generics教程,特别是页面底部的绑定类型参数部分。如果您愿意的话,您实际上可以列出多个接口,为您需要的每个接口使用& InterfaceName。

这会变得任意复杂。要演示,请参见Collections#max的javadoc声明,它(包装在两行中)是:

public static > T

max(Collection extends T> coll)

为什么这么复杂?正如Java泛型常见问题解答:保存二进制兼容性。

看起来这对变量声明不起作用,但在类上放置泛型边界时,它起作用。因此,要想做你想做的事,你可能需要跳过几个圈。但你可以做到。您可以这样做,在类上放置一个通用边界,然后:

class classB { }

interface interfaceC { }

public class MyClass {

Class variable;

}

得到有你想要的限制的variable。有关更多信息和示例,请查看Java 5中泛型的第3页。注意,在中,类名必须在前面,接口在后面。当然,你只能列出一个类。

但是为什么我要在返回对象时把它投射到t上呢?

@在我回答之前,你需要提供更多的信息。在什么情况下你需要演员?

这很有帮助。值得一提的是,类必须排在第一位,您不能说""。

也可以用逗号分隔,但只能用类分隔。

对于T,如何做同样的事情?应该扩展一个类或者实现一个接口?

@Ragunathjawahar:你不能对此过于开放。你必须有一些边界,其中之一就是提前知道你将在哪里有接口,在哪里有类,以及你将如何使用继承。对于类型参数,您几乎必须知道它是类还是接口。

@埃迪,你说得对。我知道了。它对于不同的用例是不同的。我最终用一种通用方法解决了我的问题。基类使用超级类指定边界。其中一个泛型方法通过扩展基类和接口缩小了范围。

T extends Object部分的用途是什么?

@中卓:在这种情况下,可能会有几个班,为什么他们会被昏迷分开?

@njzk2:检查我在回答中对"保持二进制兼容性"的链接。它解释了为什么"T扩展对象"部分在那里。

@埃迪:谢谢,我现在明白了。

回答的第一行是"让通配符看起来像这样",表达式中没有?,所以它真的是一个"通配符"?我这样问是因为当类型参数实际上是一个通配符时,我不能让整个"一次扩展两件事"概念起作用。

是的,它不是一个真正的通配符,你不能用一个通配符来做OP要求的事情。你可以做什么操作,有效地,只是不使用通配符。

很有趣,但您不能(表面上)做的是,因为1)类型参数必须在"&"中位于最后,2)即使在该形式中,它也会生成"意外类型"。

不能使用"匿名"类型参数(即使用?的通配符),但可以使用"命名"类型参数。只需在方法或类级别声明类型参数。

import java.util.List;

interface A{}

interface B{}

public class Test> {

T t;

}

为什么不允许使用通配符?也就是说,我不明白为什么这不应该是有效的:arraylistList;然后,如果从列表中拉出一个元素,则可以将其分配给ClassA或InterfaceB类型的变量。

用变量替换通配符是一种很好的技术!但并不总是有效。例如,Java不允许注释值类型中的名称类型变量,但它允许通配符。

java 通配符 类_关于类:具有多个类的Java泛型通配符相关推荐

  1. C# - 类_使用新成员隐藏基类成员

    1 using System; 2 3 namespace 类_使用新成员隐藏基类成员 4 { 5 // 基类 : Animal 6 public class Animal 7 { 8 // 基类的普 ...

  2. java 使用不同目录下的类_如何运行在不同目录下的java类文件? - Break易站

    Java 基础语法 在本文中,我们将学习如何使用其他项目的实用程序,类和成员.在继续之前,让我们了解一些关键字. 类路径 类路径是jvm开始执行程序的位置.与传统的动态加载行为类似,当执行Java程序 ...

  3. java object类_快速上手 Kotlin 开发系列之与 Java 互调 (1)

    学习完基础语法之后,我们来学习下 Java 和 Kotlin 互相调用的问题 本节将介绍 Kotlin 与 Java 之间的语法变化 Kotlin 文件中的函数 首先让大家感到非常不适应的一点是,Ko ...

  4. java源程序分为两大类_根据程序运行的环境不同,JAVA源程序分为两大类,那两个类?-----并解析什么意思...

    根据程序运行的环境不同,JAVA源程序分为两大类,那两个类?-----并解析什么意思以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来 ...

  5. python中的元类_理解python中的元类

    一,理解类也是对象 在python中类同样也是一种对象,只要使用关键字class,Python解释器在执行的时候就会创建一个对象,这个对象(类)自身拥有创建对象(类实例)的能力,这就是为什么他是一个类 ...

  6. python 新式类_【Python】Python 新式类介绍

    我们使用 Python 开发时, 会遇到 class A 和 class A(object) 的写法, 这在 Python2 里是有概念上和功能上的区别, 即经典类(旧式类)与新式类的区别, 英文上分 ...

  7. java循环输入_【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)...

    [新手友好型视频+图文] 全面讲解Java一维数组(内含带答案和讲解的练习题彩蛋喔) 看完即上手!更有详解版练习题来帮你加深印象~~ 一.视频讲解 一维数组详解https://www.zhihu.co ...

  8. java教程 重庆大学_重庆大学2020年5月课程《Java程序设计》答卷

    2020年5月课程考试<Java程序设计>答卷+ U" n6 ^) R2 j* \ 1.[单选题]如果String s1="Chongqing",则运行代码S ...

  9. java内置_自包含的应用程序,内置Java

    我已经看过几篇在Java 9中简要提到自包含应用程序的在线演示文稿,但我有一个问题需要我解决. 使用新模块系统,您现在只允许包含运行应用程序所需的最少代码.但是,希望运行应用程序的系统是否仍需要JRE ...

  10. java oracle管理系统_哔站播放量高达三百万的Java视频教程,如此惊人,还不来学?...

    "Java Planform Standard Edition"是Java语言的标准平台技术,是所有Java开发的语言基础,更是大数据.分布式开发思想建模的初期,此阶段的Java语 ...

最新文章

  1. Centos7系统下httpd各种方式实现与配置
  2. 动态添加的面板不生效
  3. Spring Boot 注解大全,一键收藏!回城路上复习!
  4. WEB攻击手段及防御第1篇-XSS
  5. C++中各种智能指针的实现及弊端(五)
  6. php java 通信_PHP与Java进行通信的实现方法
  7. Redis在Window服务下的安装
  8. 数据库设计(关系型)
  9. 【Spring】Feign客户端发送HTTPS请求绕过认证
  10. JAVA面试要点009---TimeUnit用法
  11. 关于ASp.NEt方面的好书,不得不看啊!!!
  12. 十大编程语言排行,Java只能位列第三?
  13. Unacceptable certificate: CN=GlobalSign Domain Validation CA - SHA256 - G2, O=GlobalSign nv-sa, C=BE
  14. 获取当前所在地的天气
  15. 多媒体艺术家jaime levy在网站甚至还没有存在之前就处于网页设计的最前沿
  16. div css教程 属性,Div+CSS布局入门教程
  17. ARM面试总结(1)
  18. The temporary upload location [C:\Users\test\AppData\Local\Temp\tomcat.8083403186712289847.8080\报错
  19. 如何在安卓(Android studio)项目中导入模块、jar包、和aar包
  20. comsol波动光学模块案例分析

热门文章

  1. MS SQL入门基础:查看表
  2. 关于asp.net2.0资源文件本地化多语言版本的一些小技巧
  3. 吴恩达 coursera ML 第七课总结+作业答案
  4. GPS nmealib学习笔记
  5. 推荐常用算法之-基于内容的推荐(转自-BreezeDeus博主)
  6. 对抗样本与生成式对抗网络
  7. Qt修炼手册6_图形:图形视图框架
  8. 基于光学导航系统,矩阵变换和3D-2D配准研究
  9. 学习ASP.NET-初探Application状态
  10. C++中的STRING数据 重载 = 和数组下标