当前位置: 首页 > 面试题库 >

通用接口数组

印子平
2023-03-14
问题内容

我们可以在Java中创建通用接口数组吗?

interface Sample<T>{}

在其他班级

Sample<T> s[] = new Sample[2] ; // for this it shows warning

Sample<T> s[] = new Sample<T>[2];// for this it shows error

问题答案:

不幸的是,Java不支持创建通用数组。我不知道确切原因。实际上,泛型仅在编译时存在,并且在您运行javac时即从.java移至.class时将其删除。但是仅仅了解限制是不够的。他们可能对此功能有些向后兼容的问题。

这是您可以使用的解决方法。

  1. 使用集合(例如列表)而不是数组。

    List<Sameple> list = new ArrayList<Sameple>(); // this is OK and typesafe
    
  2. 创建没有泛型的数组,将代码放入带有注释的特殊工厂方法中@SuppressWarnings

    public class Test {
    interface Sample<T>{}
    @SuppressWarnings("unchecked")
    public static <T> Sample<T>[] sampleArray() {
        return new Sample[2];
    }
    

    }

现在,您可以使用此工厂方法,而无需任何其他警告。

一般提示。

禁止警告是不好的做法。警告是潜在的问题。因此,如果我必须禁止警告,则至少应尝试减小禁止警告的范围。不幸的是,传统的Java
API不支持泛型。使用此类API时,我们经常会收到警告。我一直在尝试将此类用法本地化为特殊的类,或者至少将此类方法本地化sampelArray()。这些方法由标记@SuppressWarning并经常包含注释,这些注释解释了为什么在此处禁止显示警告。



 类似资料:
  • 问题内容: 假设我想定义一个接口,该接口代表对远程服务的调用。现在,对远程服务的调用通常会返回一些信息,但也可能包含输入参数。假设一个实现类通常只实现一个服务方法。鉴于上述信息,以下是一个较差的设计(感觉不太正确): 现在,让我们用一个类执行该接口,该类使用输入参数执行远程服务: 关于上述问题,我有两个问题: 如果要提供需要不同输入参数和接口方法返回类型的子类,则使用通用接口()是否合适? 我该如

  • 本文向大家介绍TypeScript 通用接口,包括了TypeScript 通用接口的使用技巧和注意事项,需要的朋友参考一下 示例 声明通用接口 具有多个类型参数的通用接口 实施通用接口 用泛型类实现它: 用非泛型类实现它:            

  • 1. 接口通用规则设置 1.1. 请求 所有API接口使用HTTP(s)协议访问,交互过程中请求和响应格式均为JSON类型。Content-Type 为 application/json;charset=utf-8。 所有请求需要携带 Header头进行身份验证: 字段名 含义 access_id 身份ID,由cc视频提供给客户 timestamp 时间戳(当前时间毫秒数,如java:System

  • 问题内容: 我很难理解如何设置已作为指针传递的接口值。我正在努力实现以下目标: 我要做什么才能使程序输出为 编辑:是否有可能使用所有解决方案? 问题答案: 您可以使用来模拟AppEngine数据存储接口。通常,我说的是最小化反射,但是您(以及AppEngine和其他ORM)在这里没有其他很好的选择来展示您想要的接口。对于模仿您的内容: 得到与 获得您想要创建的事物的类型 用它创建 (可选)使用,填

  • 问题内容: 也许我并不完全了解泛型的功能,但是空接口与泛型有什么不同,特别是如果我们能够使用反射或类型开关的话?人们总是提到Go没有泛型,但是看起来它的工作可以与Java中的类似。 问题答案: 如果您来自Java,则空接口()实际上比使用泛型更接近使用Java中的变量。 您可以为分配任何内容(就像您可以使用Java中的变量一样)。 但是,如果要使用存储在其中的实际类型,则应该“强制转换”或“类型断

  • 我见过存储库模式的各种用法。我倾向于一种我很少看到的模式,我想知道这是否有充分的理由。 例子: 利益 构造函数将是内部的,只能通过工厂模式访问,所以我不担心这里的复杂性。 IPerson 强制实现 Save() 方法,但教师不需要知道它是如何持久化的 工作原理类似于实体框架代理对象 我可以在 Iperson 对象上调用 Save(),而无需知道它是老师 应用- 欺骗 > 业务对象不再是普通的旧C#