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

为什么注释类不能推断类型参数?

注释类不能推断类型参数的原因是因为注释是在代码编译阶段之前的静态信息,而类型参数的推断是在编译阶段进行的动态过程。注释类只是对代码的解释和说明,不参与实际的编译和执行过程,因此无法进行类型参数的推断。

类型参数的推断是根据代码中的上下文和类型信息进行的,编译器会根据代码中的变量类型、方法参数类型等信息来推断类型参数的具体类型。这种推断是在编译阶段进行的,需要实际的代码参与,而注释类只是对代码的解释和说明,并不会被编译器所解析。

在实际的开发中,我们可以通过使用泛型来实现类型参数的推断,编译器会根据代码中的上下文来推断泛型的具体类型。例如,使用Java的泛型可以通过编译器的类型推断功能来自动推断类型参数,而不需要显式地指定类型。

总结起来,注释类不能推断类型参数是因为注释只是对代码的解释和说明,不参与实际的编译和执行过程,而类型参数的推断是在编译阶段进行的动态过程,需要实际的代码参与。

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

相关·内容

【Kotlin】函数 ⑤ ( 匿名函数变量类型推断 | 匿名函数参数类型自动推断 | 匿名函数又称为 Lambda 表达式 )

文章目录 一、匿名函数变量类型推断 二、匿名函数参数类型自动推断 三、Lambda 表达式 一、匿名函数变量类型推断 ---- 定义变量 时 , 如果将变量值 直接赋值给该变量 , 那么就可以 不用显示声明该变量的类型...name = "Tom" "Hello World, $name" } println(helloFun()) } 二、匿名函数参数类型自动推断 ---- 如果 需要...使用 自动类型推断 确定 匿名函数 的 参数类型 , 则在 匿名函数 的 函数体中 , 必须 显示声明 匿名函数 的 变量名 和 变量类型 ; 匿名函数 返回值 类型 , 是根据 匿名函数 函数体 中...参数类型 , 这样就可以使用 类型推断 , 自动推断出 匿名函数 的参数类型 ; 该匿名函数 函数体 最后一行表达式 的 类型 是 String 类型 , 其 返回值类型就是 String 类型 ;..., 则在 函数变量 声明时 , 确定 函数参数 类型 , 在 匿名函数 函数体 中 , 确定 函数参数名 即可 , 示例代码如下 : fun main() { val helloFun: (String

73820
  • 抽象为什么不能被实例化?

    首先,语法上,抽象不能被实例化,这是语法规定。强制实例化一个抽象的代码,编译器会报错。...它建立一个基本的格式,用来确定什么是对于所有派生是公共的——除此之外,别无用途。抽象基仅仅表示接口,不表示特例实现,因此,实例化一个抽象对象,总是没有意义的。...第三,从编译器设计的实现上来看,如果想要禁止用户实例化抽象,可以在抽象的所有虚函数里,打印出错的信息,以提示用户不能实例化抽象基。...但是这种方法只有到运行时才能获得出错信息,并且要求程序员进行可靠且详尽的测试,并不能禁止程序员实例化抽象基。最好是在编译时就能发现这个问题。...因此,只要有一个函数在中被声明为纯虚函数,则VTABLE就是不完全的。 如果一个的VTABLE是不完全的,当某人试图创建这个的对象时,编译器做什么呢?它不能安全地创建一个纯抽象的对象。

    62120

    为什么一个不能随意被继承?

    里氏替换原则(Liskov Substitution Principle,LSP)可以解释为: 派生类型(子类)必须能够替换掉它们的基类型(父)。...只看基 Dog 类型来说,基于里氏替换原则,你既可以给 ShepherdDog,又可以给 Cat。但理性告诉你,你不能给 Cat。因为,你把 Cat 给邻居,邻居会觉得你在鄙视他:咋的?...小伙伴们,肯定就会说啦:Cat 和 Dog 是两种动物了,肯定不能使用继承关系啦~ 这个说法是对的。但对于我们面向对象编程过程中,尤其是在“继承”关系中,我们考虑的是“替换性”。...Cat 不能替换 Dog, 因此,我们不能让 Cat extends Dog。 同样,网络上经典的例子:正方形不是长方形的子类,也是如此。...而什么情况下能对这个基进行具体实现呢?满足里氏代换原则,你就可以基于基进行具体实现。 为什么里氏代换原则这么重要,小伙伴们理解了吗?

    20520

    为什么阿里强制 boolean 类型变量不能使用 is 开头?

    ,后者是包装为什么不推荐使用isXXX来命名呢?...到底是用基本类型的数据好呢还是用包装好呢?...,无论是boolean还是Boolean都不准使用isXXX来命名 对于非boolean类型参数,getter和setter方法命名的规范是以get和set开头 对于boolean类型参数,setter...方法是以set开头,但是getter方法命名的规范是以is开头 包装自动生成的getter和setter方法的名称都是getXXX()和setXXX() 1.其实javaBeans规范中对这些均有相应的规定...工作中使用基本类型的数据好还是包装好 咱们举个例子,一个计算盈利的系统,其盈利比例有正有负,若使用了基本类型bouble定义了数据,当RPC调用时,若出现了问题,本来应该返回错误的,但是由于使用了基本类型

    88820

    为什么子类引用不能指向父对象

    在java、C++等面向对象的语言中,实现多态的方式就是使用父引用指向子类对象,所以父引用指向子类对象是没有任何为题的,但是,大家有没有想过,子类引用可以指向父对象吗?答案是不可以!...但是为什么呢? 下图是在java中,使用子类引用指向父对象的情况 ? 编译可以通过,因为对生成的Person对象做了一个强制转换,骗过了编译器,其本质上还是属于子类引用指向父对象。...为什么java里面不允许这种操作,而C++却允许这种操作呢?我们接下来在C++的环境下,反汇编窥探一下这写代码究竟干了些什么事。...首先,在执行这行代码的时候,先把一个4压入栈中,然后去调用operator new这个函数,很明显,这个4就是该函数的一个参数,它完成的任务就是,向堆空间申请4个字节的存储空间,为什么是4个字节?...因为Person这个里面只有age这一个属性,因此new出来的对象也只需要4个字节存储就够了。然后使用stu这个Student类型的指针指向这4个存储空间的首地址。 ? ?

    2.7K31

    IDEA使用模板自动生成注释和方法,解决方法注释在接口中或普通的方法外使用模板注释不带参数的情况

    IDEA自动生成注释和方法注释 注释 方法注释 注释 按照下方路径打开设置 File->Settings->Editor->File and Code Templates->Includes-...File->Settings->Editor->Live Templates 1.创建模板组 2.创建对应模板 3.修改快捷键(缩略词) 针对在接口中或普通的方法外使用模板注释不带参数的情况...假如触发的快捷键为doc, ★在中输入 "/doc" 触发方法注释可以带参数, ★但是下方的template text 开头要去掉"/" 为了符合注释习惯,可以将快捷键设为 * 或 **,...★在中输入 /*或者/**可以触发带参数的方法注释 ★对应的,在template text 开头要去掉 /或者/* 相当于将快捷键替换为template text中的内容,很好理解 4.添加模板内容...-脚本之家 使用groovy脚本生成idea方法注释参数格式对齐 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/179201.html原文链接:https://javaforall.cn

    1.4K10

    Java的String为什么要设成immutable类型

    答案一:         最流行的Java面试题之一就是:什么是不可变对象(immutable object),不可变对象有什么好处,在什么情况下应该用,或者更具体一些,Java的String为什么要设成...immutable类型?...安全性         String被许多的Java(库)用来当做参数,例如 网络连接地址URL,文件路径path,还有反射机制所需要的String参数等, 假若String不是固定不变的,将会引起各种安全隐患...事实上,这也是Java面试中的许多 "为什么" 的答案。 答案三:String不可变性的好处         String是所有语言中最常用的一个。...但如果字符串是可变的,那么String interning将不能实现(译者注:String interning是指对不同的字符串仅仅只保存一个,即不会保存多个相同的字符串。)

    35240

    JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封

    :声明一个成员变量,并初始化值为null图片声明一个数组变量,并为数组静态初始化(省略new的情况下)图片没有初始化的方法内的局部变量声明图片方法的返回值类型图片方法的参数类型图片构造器的参数类型图片作为...不能使用 var 作为名。这不是JavaScript。var并不会改变 Java是一门静态类型语言的事实。...编译器负责推断类型,并把结果写入字节码文件,就好像是开发人员自己敲入类型一样。...不过这种要么可以继承,要么不能继承的机制不够灵活,有些时候我们可能想让某个可以被某些类型继承,但是又不能随意继承,是做不到的。...比如,Java 代码虽然进行了一些类型推断等改进,更易用的集合 API 等,但仍然给开发者留下了过于刻板、形式主义的印象,这是一个长期的改进方向。

    2.9K11

    【Groovy】Groovy 动态语言特性 ( Groovy 中函数实参自动类型推断 | 函数动态参数注意事项 )

    文章目录 前言 一、Groovy 中函数实参自动类型推断 二、函数动态参数注意事项 三、完整代码示例 前言 Groovy 是动态语言 , Java 是静态语言 ; 本篇博客讨论 Groovy 中 , 函数实参的自动类型推断...; 一、Groovy 中函数实参自动类型推断 ---- 定义两个不同的 Student 和 Worker , 在中都定义 hello 方法 ; class Student { def hello...object , 暂不指定参数类型 , 在函数中调用参数对象的 hello 方法 ; void fun(object) { object.hello() } 分别向该 fun 函数中传入 Student...和 Worker 对象 , 则会分别调用对应中的 hello 方法 ; fun(new Student()) fun(new Worker()) 二、函数动态参数注意事项 ---- 这里要特别注意..., 不要传递错误的对象 , 如果类中没有定义 hello 方法 , 编译时可以编译通过 , 但是运行时会报错 ; 如 : 定义了一个没有 hello 方法的 , class Farmer {} 该该类实例对象传入

    81530

    为什么要创建一个不能被实例化的

    __(self): raise Exception('不能实例化这个') kingname = People() kingname.say() 一旦初始化就会报错,如下图所示:...一个不能被初始化的,有什么用? 这就要引入我们今天讨论的一种设计模式——混入(Mixins)。 Python 由于多继承的原因,可能会出现钻石继承[1]又叫菱形继承。...{self.age}岁') kingname = People('kingname', 28) pm = People('pm', 25) kingname > pm 显然,这样写会报错,因为两个的实例是不能比较大小的...: 本质上,混入的写法与普通的继承没有什么区别。...混入: 不能包含状态(实例变量)。 包含一个或多个非抽象方法。 参考资料 [1]钻石继承: https://en.wikipedia.org/wiki/Multiple_inheritance

    3.4K10

    可以迭代大部分数据类型的 for…of 为什么不能遍历普通对象?

    for...of 允许你遍历 Array(数组), String(字符串), Map(映射), Set(集合),TypedArray(类型化数组)、arguments、NodeList对象、Generator...iterable) { console.log(value); } // Output: // 1 // 2 // 3 } { // 迭代Arguments Object(参数对象...of obj){ console.log(item) } // Uncaught TypeError: obj is not iterable 可以看出,for of可以迭代大部分对象甚至字符串,却不能遍历普通对象...anotherNewArr } for (const value of array) { console.log(value); // 'foo', 'bar', 'baz' } 普通对象为何不能被...简单来说,ES6 为了统一集合类型数据结构的处理,增加了 iterator 接口,供 for...of 使用,简化了不同结构数据的处理。

    1.1K30

    【Kotlin】泛型 ① ( 泛型 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 )

    文章目录 一、泛型 二、泛型参数 三、泛型函数 四、多泛型参数 五、泛型类型约束 一、泛型 ---- 定义一个 泛型 , 将 泛型参数 T 放在 尖括号 中 , 该泛型参数放在 名后..., 主构造函数之前 , 该泛型参数 T 是 类型占位符 , 在 该泛型中 可以使用 类型占位符 T 作为一个 使用 , 可以 定义 T 类型成员属性 主构造函数中可以接收 T 类型的实例对象作为参数...下面的代码中 , 声明了 Student 泛型 , 该泛型 接收 T 类型的泛型参数 , 在主构造函数中接收 T 类型参数 , 在该泛型中声明了 T 类型的成员属性 ; class Student..., 需要两个泛型参数来表示其类型 ; T 类型在泛型中注明 , 可以在该泛型 Student 中随意使用 , 但是 泛型参数 R 是首次在该函数中使用 , 因此需要在该函数的 fun 关键字...Boolean 类型 ; 3.14 true 五、泛型类型约束 ---- 在 泛型 , 泛型函数 中 , 使用泛型前 , 需要声明 泛型参数 : 泛型 泛型参数 声明 : 如果类中 引入了新的泛型类型

    2.8K10

    【Kotlin】泛型总结 ★ ( 泛型 | 泛型参数 | 泛型函数 | 多泛型参数 | 泛型类型约束 | 可变参数结合泛型 | out 协变 | in 逆变 | reified 检查泛型参数类型 )

    放在 尖括号 中 , 该泛型参数放在 名后 , 主构造函数之前 , 该泛型参数 T 是 类型占位符 , 在 该泛型中 可以使用 类型占位符 T 作为一个 使用 , 可以 定义 T 类型成员属性...都使用 T 来表示泛型 ; 代码示例 : 下面的代码中 , 声明了 Student 泛型 , 该泛型 接收 T 类型的泛型参数 , 在主构造函数中接收 T 类型参数 , 在该泛型中声明了 T...Boolean 类型 ; 3.14 true 五、泛型类型约束 ---- 在 泛型 , 泛型函数 中 , 使用泛型前 , 需要声明 泛型参数 : 泛型 泛型参数 声明 : 如果类中 引入了新的泛型类型...子类泛型对象 ; 在 泛型 中 , 如果只将 泛型类型 作为 函数的参数 类型 , 则在 声明 泛型参数 类型 时 , 在 泛型参数 前 使用 in 关键字 , 同时 该 泛型 又称为 消费..., 泛型参数 是 子类 的 泛型对象 , 不可以赋值 给 泛型参数 是父 的变量 ; Java 中的泛型对象赋值 , 不存在继承关系 , 是什么类型就是什么类型 , 类型要严格相同 ; import

    3.9K10
    领券