首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在使用具有扩展泛型和默认类型的接口时,为什么不能使用类型赋值?

在使用具有扩展泛型和默认类型的接口时,不能使用类型赋值的原因是因为接口的泛型和默认类型是在接口定义时确定的,而类型赋值是在使用接口时确定的。接口的泛型和默认类型是为了在接口定义中提供一种通用的类型支持,以便在实现接口时可以根据具体情况指定不同的类型。

使用类型赋值会破坏接口定义中的泛型和默认类型的约束,导致接口的使用变得不确定和不可靠。因此,在使用具有扩展泛型和默认类型的接口时,应该遵循接口定义中的类型约束,而不是使用类型赋值。

举例来说,假设有一个接口定义如下:

代码语言:txt
复制
interface MyInterface<T extends Number> {
    void doSomething(T value);
}

在实现该接口时,可以指定具体的类型,例如:

代码语言:txt
复制
class MyImplementation implements MyInterface<Integer> {
    void doSomething(Integer value) {
        // 实现具体逻辑
    }
}

在这个例子中,接口MyInterface的泛型类型T被限定为Number的子类型。在实现接口时,我们指定了具体的类型Integer,并实现了doSomething方法。

如果我们尝试使用类型赋值来实现接口,例如:

代码语言:txt
复制
class MyImplementation implements MyInterface {
    void doSomething(Integer value) {
        // 实现具体逻辑
    }
}

这样的代码是错误的,因为在接口定义中,泛型类型T的约束是Number的子类型,而在类型赋值中没有指定具体的类型,违反了接口定义的约束。

总结起来,不能使用类型赋值来实现具有扩展泛型和默认类型的接口,因为接口的泛型和默认类型是在接口定义时确定的,而类型赋值是在使用接口时确定的。为了保证接口的正确使用,应该遵循接口定义中的类型约束,指定具体的类型来实现接口。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript 基本类型和泛型的使用

例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。...infiniteLoop(): never { while (true) { } } 复制代码 typescript 泛型 先来谈谈使用场景 模拟一个场景,当我们要使用一个服务器提供的不同数据...正解: 使用 typescript 泛型(Generic) 先简单的来说一下什么是泛型? ==就是表示一个类型的变量,用他来代替某个实际的类型用于编程。...如果你使用 vscode 的话,我们默认你已经安装的支持 typescript 的环境。...可以看到我们在推导类型和返回值类型的时候,vscode 会提示你对应的 string 和 number的类型。

2.5K40

使用通配符和泛型:完成父子类关系的List对象的类型匹配

泛型和通配符 使用泛型和通配符都可以让一个方法所表示的算法逻辑适应多种类型。...Java中具备继承关系的类A、B(A extends B)它们的集合List和List之间是没有继承关系的, 可以使用泛型或通配符来让一个方法支持同时接受List和List。...可以通过通配符或者泛型方法实现。 通配符实现 使用List这样的形参,就可以接收集合项为Animal子类的任意List。...泛型方法实现 抛开实际意义,假设需要findScaredAnimals()中,返回值和参数对应的具体Animal子类型是一致的,那么就需要用到泛型了: public ...泛型参数也可以是多个的,而且之间存在关系。 小结 以上通过一个不太实际的案例说明了使用泛型和通配符来解决List泛型集合之间的“匹配”问题。这也是它们的主要用途之一。

1.6K70
  • 使用通配符和泛型:完成父子类关系的List对象的类型匹配

    泛型和通配符 使用泛型和通配符都可以让一个方法所表示的算法逻辑适应多种类型。...Java中具备继承关系的类A、B(A extends B)它们的集合List和List之间是没有继承关系的, 可以使用泛型或通配符来让一个方法支持同时接受List和List。...可以通过通配符或者泛型方法实现。 通配符实现 使用List这样的形参,就可以接收集合项为Animal子类的任意List。...泛型方法实现 抛开实际意义,假设需要findScaredAnimals()中,返回值和参数对应的具体Animal子类型是一致的,那么就需要用到泛型了: public ...泛型参数也可以是多个的,而且之间存在关系。 小结 以上通过一个不太实际的案例说明了使用泛型和通配符来解决List泛型集合之间的“匹配”问题。这也是它们的主要用途之一。 (本文使用Atom编写)

    2.8K00

    面试系列之-JAVA泛型剖析(JAVA基础)

    而静态变量和静态方法在类加载时已经初始化,直接使用类名调用;在泛型类的类型参数未确定时,静态成员有可能被调用,因此泛型类的类型参数是不能在静态成员中使用的。...泛型接口中的类型参数,在该接口被继承或者被实现时确定。解释如下: (1)定义一个泛型接口如下: 注意:在泛型接口中,静态成员也不能使用泛型接口定义的类型参数。...// 在jdk8 中,可以在接口中使用默认方法, 默认方法可以使用泛型接口的类型参数 default R method(U u) { return null; } } (...IUsb 时,若是没有确定泛型接口 IUsb 中的类型参数,则默认为 Object。...** **泛型方法签名中声明的类型参数只能在该方法里使用,而泛型接口、泛型类中声明的类型参数则可以在整个接口、类中使用。

    39720

    Q&A:Java

    默认值 :从变量是否有默认值来看,成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值。...泛型 泛型提供编译时类型安全检测机制,通过泛型参数可以指定传入的对象类型,编译时可以对泛型参数进行检测 泛型擦除:泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉。...Java编译器是通过先检查代码中泛型的类型,然后在进行类型擦除,再进行编译。 编译时,检查添加元素的类型,更安全,减少了类型转换次数,提高效率。...比如原生的List返回类型是Object对象,需要手动转换类型才能使用,使用泛型后编译器自动转换 泛型类、泛型接口、泛型方法 支持通配符 :支持任意泛型类型 <?...java8新特性 lambda 表达式、Stream流式编程、新时间日期 API、接口默认方法与静态方法 集合 集合的好处 数组 1)长度开始时必须指定,而且一旦指定,不能更改 2)保存的必须为同一类型的元素

    63120

    TypeScript进阶 之 重难点梳理

    说到接口(interface),我们都知道 「ts 的核心原则之一就是对值所具有的结构进行类型检查。」 它有时被称之为“鸭式辩型法”或“结构性子类型”。而接口就是其中的契约。...在 ts 中,「extends 关键字既可以来扩展已有的类型,也可以对类型进行条件限定」。在扩展已有类型时,不可以进行类型冲突的覆盖操作。...说白了,「泛型就是不预先确定的数据类型,具体的类型在使用的时候再确定的一种类型约束规范」。 泛型可以应用于 function、interface、type 或者 class 中。...增强程序的扩展性 不必写多条函数重载,冗长的联合类型声明,增强代码的可读性 灵活控制类型之间的约束 泛型,在 ts 内部也都是非常常用的,尤其是对于容器类非常常用。...为什么我不能判断类型或者可选参数呢?

    3.9K20

    一起重学TypeScript

    验证类型时,顺序不影响验证。 简单的来说,它是类型约束的定义,当你使用这个定义接口时,它会一一匹对接口中定义的类型。 只要不满足接口中的任何一个属性,都不会通过的。...在定义一个数组时,可以定义一个 索引类型接口,这样就约束了它必须传递哪些类型的值。...如果传入了一个 string 类型的参数,那么我们也不知道它返回啥类型。 泛型 : 它可以使 返回类型 和 传入类型 保持一致,这样我们可以清楚的知道函数返回的类型为什么类型。...5.1 泛型接口 泛型接口可以这样理解: 当你需要给接口指定类型时,但目前不知道属性类型为什么时,就可以采用泛型接口 你可以给接口指定参数为多个泛型类型,也可以单个;当使用时,明确参数类型即可。...接口约束 通过定义接口, 泛型函数继承接口,则参数必须实现接口中的属性,这样就达到了泛型函数的约束 类约束 通过给类的泛型指定为另一个类,这样就规定了类泛型的类型都为另一个类 # 第一种 // 定义接口

    2K00

    TypeScript基础知识

    类型别名:不仅可以为对象指定类型,实际上可以为任意类型指定别名。但是不能合并声明。 泛型 泛型是可以保证类型安全的前提下,让函数等与多种类型一起工作,从而实现复用,常用于:函数、接口、类中。...泛型约束 如图,因为泛型T不一定包含属性length,所以当我们内部使用泛型变量的时候,不知道它是那种类型,所以不能操作它的属性和方法。...泛型接口 我们可以在定义接口的时候指定泛型。 在接口名称的后面添加类型变量>,那么这个接口就变成了泛型接口。...使用泛型接口时,需要显式指定具体的类型,上述代码的KeyValue 实际上,JS中的数组在TS中就是一个泛型接口,当我们在使用数组时,TS会根据数组的不同类型,来自动将类型变量设置为响应的类型...当使用泛型时没有在代码中直接指定类型参数,从实际值参数中也无法推测出时,这个默认类型就会起作用。

    2.2K20

    泛型(泛型擦除)【java基础—-泛型】

    1.3 泛型定义(泛型类、泛型方法(泛型方法返回值是泛型的,泛型方法在普通类和泛型类里)): 1.4特点: 对于泛型特点(1)举个例子 : 没有使用泛型时的异常抛出 对于泛型特点(2)访问时不需要类型转换...3.为什么要使用泛型,泛型的好处: 3.1泛型的好处 3.2泛型类的好处 4.使用泛型注意点: 4.1不同泛型之间不能相互赋值,泛型不存在多态((检查机制)泛型特点(3)) 4.2要注意泛型擦除...中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数(type parameter),这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。...我们在使用 list.add() 方法时,根据提示知道凡是Object对象都可以添加进去,但是要使用的时候忘了添加过什么类型的对象进去,根据提示强转过,但是由于添加进去一些类型不同的,强转可以在编译时通过...,类型擦除了,为什么不同泛型之间不能相互赋值!!

    2.6K51

    彻底讲清 Java 的泛型(上)

    使用别人创建好的泛型相对容易,但是创建自己的泛型时,就会遇到很多意料之外的麻烦。 在很多情况下,它可以使代码更直接更优雅。...同时可以理解 Java 泛型的局限是什么 为什么会有这些局限 最终明确 Java 泛型的边界 只有知道了某个技术不能做什么,你才能更好地做到所能做的(不必浪费时间在死胡同)。...要达到这个目的,需要使用类型参数,用尖括号括住,放在类名后面。 然后在使用类时,再用实际类型替换此类型参数。 在下面的例子中,T 就是类型参数: ?...一般来说,你可以认为泛型和其他类型差不多,只不过它们碰巧有类型参数。 在使用泛型时,只需要指定它们的名称和类型参数列表。 3 一个元组类库 有时一个方法需要能返回多个对象。...a1 和 a2 对它们执行任何操作,但无法对 a1 和 a2 重新赋值。

    64230

    Kotlin入门潜修之类和对象篇—泛型及其原理

    而假如我们在创建类型的时候也为其指定参数,这个参数又是个类型,那么我们就称之为泛型。 那么泛型的作用和意义是什么?使用泛型能够像传递参数一样传递类型,同时保证运行时的类型安全。...这也就是和使用Object相比(所有类型都可以用基类Object表示),泛型的一个优势所在。...in修饰符允许我们写 } 这种情况叫做逆变,即我们当类型参数具有继承关系的时候,我们可以认为整个泛型也有继承关系,而使用in修饰后,可以允许父类型变量赋值于子类型变量,如上面代码中,将Comparable...in作用于赋值操作时,只允许超类类型或自身类型赋值于其子类类型,而作用于add等写操作时,只允许写入子类类型或者自身类型。...在kotlin中,默认的超类类型上限是Any?,在定义超类型的时候,只能指定一个超类,比如中只能指定T的超类上限是SupperT,而不能指定多个。

    93930

    (37) 泛型 (下) - 细节和局限性 计算机程序的思维逻辑

    下面,我们将从以下几个方面来介绍这些细节和局限性: 使用泛型类、方法和接口 定义泛型类、方法和接口 泛型与数组 使用泛型类、方法和接口 在使用泛型类、方法和接口时,有一些值得注意的地方,比如: 基本类型不能用于实例化类型参数...运行时类型信息不适用于泛型 在介绍继承的实现原理时,我们提到,在内存中,每个类都有一份类型信息,而每个对象也都保存着其对应类型信息的引用。...定义泛型类、方法和接口 在定义泛型类、方法和接口时,也有一些需要注意的地方,比如: 不能通过类型参数创建对象 泛型类类型参数不能用于静态变量和方法 了解多个类型限定的语法 我们逐个来看下。...对于泛型类声明的类型参数,可以在实例变量和方法中使用,但在静态变量和静态方法中是不能使用的。...泛型与数组 泛型与数组的关系稍微复杂一些,我们单独讨论一下。 为什么不能创建泛型数组? 引入泛型后,一个令人惊讶的事实是,你不能创建泛型数组。

    92760

    c# 误区系列(二)

    初学者可能认为有泛型参数的就是泛型,其实不是的。 这个是为什么呢?其实是这样子的,当泛型类型确认的时候,那么add 定义的时候就已经确定了类型。 ?...所有泛型的开销没有我们想象的这么大,在应用中,甚至使用泛型效率更高,不是说泛型是优化,而是泛型帮我们避免了太多装箱和拆箱操作。...拆箱时如果不是null,则返回值,否则返回null。 ? 所以在c# 不能把null 看做是某个具体的地址,0x00之类的,更多的是一个概念。 那么问题来了,为什么int 不能为空?...委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性...所以说为什么值类型在创建的时候要清空分配的地址,是在使用的时候抹除的。 引用类型的有点在于传递,因为引用类型不用复制整个地址块,只需要复制堆上对象的指定位置,32位是4个字节,64是8个字节。

    62340

    .NET基础面试题整理

    类:完全可扩展的,除非显示的声明sealed 否则类可以继承其他类和接口,自身也能被继承注:虽然结构不能被继承 可是结构能够继承接口,方法和类继承接口一样 3.内部结构: 结构:没有默认的构造函数,...但是可以添加构造函数没有析构函数没有 abstract 和 sealed(因为不能继承)不能有protected 修饰符可以不使用new 初始化在结构中初始化实例字段是错误的 类:有默认的构造函数 有析构函数...执行时的行为:泛型也是对象,泛型类的“类型参数”变成了元数据;CLR会在需要的时候构造利用它们的类。一个泛型类经过编译好之后和普通的类并没有什么区别。编译的结果只有元数据和CIL。...以后,每次用一个引用类型参数来说实例化一个构造好的类型时,并在CIL中用Object引用替换类型参数,CLR都会重用以前生成好的泛型版本 09 9..NET BCL中有哪些泛型类型?...使用时有什么需要注意的吗? 如何选择是定义一个“完全抽象”的抽象类,还是接口?什么是接口的“显式实现”?为什么说它很重要?

    1.6K21

    深入浅出TypeScript | 青训营笔记

    泛型 1. 什么时候需要泛型 2. 泛型是什么 泛型(Generics)是一种参数化类型的机制,可以让我们在定义函数、类和接口时,使用一个或多个类型作为参数来指定其返回值或成员的类型。...就是临时占个位置, 之后通过传递过来的参数进行推导 使用泛型时,我们需要在函数、类或接口名称后面加上尖括号 ,其中 T 代表泛型类型参数名。...然后就可以在函数内部或类/接口成员的声明中使用这个泛型类型了。 3....使用推断类型的方式调用这个函数时,TypeScript 会自动根据传入参数的类型推导出泛型类型 T 的具体类型。...需要注意的是,在使用泛型时,我们还可以对泛型类型参数进行约束,以限制它们只能是某个特定类型或其子类型。

    8410

    TypeScript学习指南(有PDF小书+思维导图)

    验证类型时,顺序不影响验证。 简单的来说,它是类型约束的定义,当你使用这个定义接口时,它会一一匹对接口中定义的类型。 只要不满足接口中的任何一个属性,都不会通过的。...在定义一个数组时,可以定义一个 索引类型接口,这样就约束了它必须传递哪些类型的值。...如果传入了一个 string 类型的参数,那么我们也不知道它返回啥类型。 泛型 :它可以使 返回类型 和 传入类型 保持一致,这样我们可以清楚的知道函数返回的类型为什么类型。...5.1 泛型接口 泛型接口可以这样理解: 当你需要给接口指定类型时,但目前不知道属性类型为什么时,就可以采用泛型接口 你可以给接口指定参数为多个泛型类型,也可以单个;当使用时,明确参数类型即可。...接口约束 通过定义接口, 泛型函数继承接口,则参数必须实现接口中的属性,这样就达到了泛型函数的约束 类约束 通过给类的泛型指定为另一个类,这样就规定了类泛型的类型都为另一个类 # 第一种 // 定义接口

    3.1K31

    C#泛型的逆变协变之个人理解

    object> list = new List(); 这个为什么就可以 A:   这就要讲到C#泛型里的逆变协变了 Q:   细嗦细嗦 逆变协变 C#泛型中的逆变(in)协变(out)对于不常自定义泛型的开发来说..., 与协变相似, 需要在泛型 T 之前加上关键词 in 对比上方的协变, 逆变看起来就像是将基类赋值给子类, 但这其实符合里氏代换的 当我们调用 item.Print 时, 看起来允许传入的参数为 string...类型, 而实际上最终调用的 Face.Print 是支持 object 的, 传入 string 类型的参数没有任何问题 逆变协变的作用 逆变(in)协变(out)的作用就是扩展泛型的用法...A:   简单来说, 有关泛型输入的用逆变, 关键词是in, 有关泛型输出的用协变, 关键词是out, 如果接口中既有输入又有输出, 就不能用逆变协变 Q:   为什么这两个不能同时存在?...A:   协变的表现形式为将子类赋值给基类, 当进行输出相关操作时, 输出的对象类型为基类, 是将子类转为基类, 你可以说子类是基类; 逆变的表现形式为将基类赋值给子类, 当进行输入相关操作时, 输入的对象为子类

    20120

    编写高质量可维护的代码:Awesome TypeScript

    并且在遇到不同类型变量的赋值时,会自动进行类型转换,带来了不确定性,容易产生 Bug。 JavaScript 原生没有命名空间,需要手动创建命名空间,来进行模块化。...并且在代码执行阶段,不允许不同类型变量之间的赋值。 清晰的类型注解,不仅让代码的可读性更好,同时也增强了 IDE 的能力,包括代码补全、接口提示、跳转到定义等等。...#name; // 访问会报错 泛型 应用场景:当我们需要考虑代码的可复用性时,就需要用到泛型。让组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型。...泛型允许同一个函数接受不同类型参数,相比于使用 Any 类型,使用泛型来创建的组件可复用和易扩展性要更好,因为泛型会保留参数类型。泛型可以应用于接口、类、变量。...下面用一些示例来说明下泛型的使用: 泛型接口 interface identityFn { (arg: T): T; } 泛型类 class GenericNumber

    2.4K10

    JAVA回忆录之泛型篇

    数组是协变的(协变:其实只是表示如果Stub为Super的子类型,那么类型Stub[]就是Super[]的子类型),泛型不是协变的。因此数组和泛型不能好好地混合使用。...的时候我们声明泛型和new一个泛型实例时必须制定相同的类型。...而从 JDK1.7开始new的泛型实例不用制定类型,编译期会默认与声明的对象用于相同的泛型类型。 擦除 前文中讲过泛型的擦除,为什么这里还需要再讲述呢?...泛型在使用过程中应该注意的问题 不能用基本类型实例化类型参数 Map pair = new HashMap(); 这样的语句是非法的。...不能抛出也不能捕获泛型类实例 泛型类扩展Throwable即为不合法,因此无法抛出或捕获泛型类实例。

    52430
    领券