首页
学习
活动
专区
工具
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)它们集合ListList之间是没有继承关系, 可以使用或通配符来让一个方法支持同时接受ListList。...可以通过通配符或者方法实现。 通配符实现 使用List这样形参,就可以接收集合项为Animal子类任意List。...方法实现 抛开实际意义,假设需要findScaredAnimals()中,返回值参数对应具体Animal子类型是一致,那么就需要用到了: public ...参数也可以是多个,而且之间存在关系。 小结 以上通过一个不太实际案例说明了使用通配符来解决List集合之间“匹配”问题。这也是它们主要用途之一。

1.6K70

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

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

2.5K00

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

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

28320

Q&A:Java

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

60220

TypeScript进阶 之 重难点梳理

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

3.8K20

一起重学TypeScript

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

2K00

TypeScript基础知识

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

2.1K20

擦除)【java基础—-

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

2.4K50

彻底讲清 Java (上)

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

61730

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

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

89330

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

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

89760

c# 误区系列(二)

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

60840

.NET基础面试题整理

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

1.6K21

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

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

2.7K30

编写高质量可维护代码: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即为不合法,因此无法抛出或捕获类实例。

50130

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:   协变表现形式为将子类赋值给基类, 当进行输出相关操作, 输出对象类型为基类, 是将子类转为基类, 你可以说子类是基类; 逆变表现形式为将基类赋值给子类, 当进行输入相关操作, 输入对象为子类

17020

面向对象编程基础2(干货)

结构不能定义默认构造函数,编译器会定义。...概念4: 1.类:可理解为一个模子,装入类型材料,就可以塑造出想要产品。 2.语法展示: ? ? 3.使用原因: ? 4.实例化过程 ?...6.方法:方法就是方法模型,给定具体类型,就可以实例化出一个操作该类型具体方法。(方法可存在于普通类中) 7.语法展示: ? ? ? 8.约束:约束就是控制控制器。...9.接口接口允许我们将接口成员参数返回类型设置为参数接口。 定义及实现: ? ? 概念5:集合 1.预定义常用集合。...运算符重载:对运算符赋予新概念 4. 类、接口方法。

1.1K20
领券