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

Java基础系列(三十六):泛型中需要注意九点

= table; //这里可以通过数组类型存储检查,但是仍会导致一个类型错误 objArr[0] = new Pair(); 所以,我们不能创建参数化类型数组,这里需要注意是...所以当我们需要想参数个数可变方法传一个泛型类型实例时候,一定要注意,而不是无脑去加上注释抑制这个警告。 五、不能实例化类型变量 不能使用像new T(...)...} 这样做,虽然在编译时候没有任何警告,但是在运行时候会将Object[]引用赋给Comparable[]变量时候,会抛出一个ClassNotCastException异常。...九、可以消除对受查异常检查 Java异常处理一个基本原则是,必须为所有受查异常提供一个处理器。...调用toThread时,会得到Thread类一个对象,它run方法不会介意受查异常。

60140

Java 中文官方教程 2022 版(六)

默认情况下,“未经检查警告是禁用,尽管编译器会给出提示。要查看所有“未经检查警告,请使用-Xlint:unchecked重新编译。...如果程序执行了一些操作导致在编译时产生未经检查警告,则会出现这种情况。...如果在编译时(在编译时类型检查规则限制范围内)或在运行时无法验证涉及参数化类型操作正确性(例如,强制转换或方法调用),则会生成 未经检查警告。...例如,当混合使用原始类型和参数化类型,或执行未经检查强制转换时,就会发生堆污染。 在正常情况下,当所有代码同时编译时,编译器会发出未经检查警告,以引起您对潜在堆污染注意。...一个与可变参数形式参数l参数化类型不匹配值可以赋给变量objectArray,从而可以赋给l。然而,在这个语句中,编译器并不生成未经检查警告

11600
您找到你想要的搜索结果了吗?
是的
没有找到

Java 中文官方教程 2022 版(四)

本课程解释了注解可以在哪里使用,如何应用注解,在 Java 平台标准版(Java SE API)中有哪些预定义注解类型可用,如何将类型注解与可插入类型系统结合使用以编写具有更强类型检查代码,以及如何实现重复注解...在下面的示例中,使用了一个已弃用方法,编译器通常会生成警告。然而,在这种情况下,该注解导致警告被抑制。...使用此注解类型时,与varargs使用相关未经检查警告将被抑制。...在您纠正代码以消除所有警告后,当程序运行时,这种特定错误将不会发生。 您可以使用多个类型检查模块,每个模块检查不同类型错误。...您可以在任何需要使用标准注解地方重复使用注解。例如,您有一个处理未经授权访问异常类。

12600

Java泛型介绍

Java泛型处理几乎都在编译器中进行,编译器生成bytecode是不包涵泛型信息,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。 二、编译器如何处理泛型?     ...对每个泛型类只生成唯一一份目标代码;该泛型类所有实例都映射到这份目标代码上,在需要时候执行类型检查和类型转换。     ...类型擦除关键在于从泛型类型中清除类型参数相关信息,并且再必要时候添加类型检查和类型转换方法。     ...( NumericValue t hat)   { return this.value - that.value; }   public  int compareTo(Object that) { return...,第23条:请不要在新代码中使用原生态类型) 4.不要忽略编译器警告信息,那意味着潜在ClassCastException等着你。

43220

Java 中文官方教程 2022 版(四十三)

编译器警告:“注意:…使用了未经检查或不安全操作” 当调用方法时,会检查参数值类型并可能进行转换。...ClassWarning调用getMethod()会导致典型未经检查转换警告: import java.lang.reflect.Method; public class ClassWarning...由于c声明为原始类型(没有类型参数),并且getMethod()相应参数是参数化类型,因此会发生未经检查转换。编译器需要生成警告。...(参见Java 语言规范,Java SE 7 版,章节未经检查转换和方法调用转换。) 有两种可能解决方案。更可取是修改c声明以包含适当通用类型。在这种情况下,声明应为: Class<?...查找构造函数说明了如何检索具有特定参数构造函数 检索和解析构造函数修饰符展示了如何获取构造函数声明修饰符以及有关构造函数其他信息 创建新类实例展示了如何通过调用其构造函数来实例化一个对象实例

9200

如何使用 Java 泛型来避免 ClassCastException

这个接口提供了一个 int compareTo (t o)方法,该方法将当前对象与参数(类型为 t)进行比较, 当该对象小于、等于或大于指定对象时返回负整数、零或正整数。...它还指定了一个具有形式类型参数 T 泛型构造函数 那么在构造函数调用时是这样: new Box("Aggies"); 进一步利用菱形运算符来消除构造函数调用 Marble 实际类型参数...java.lang.Integer cannot be cast to java.lang.String at Scratch_15.main(scratch_15.java:17) */ 第一个未检查警告...当 s 引用 Set 被分配给 ss 时,编译器会生成一个未检查警告。它因为编译器不能确定 s 引用 Set 类型。...结果就是堆污染 第二个未检查警告:由于泛型擦除,编译器也不能确定变量 s 是指 Set 还是 Set 类型,这时就会产生 unchecked warning

2.1K40

如何使用 Optional 模式解决 C# 中烦人空引用问题

Nullable 是永远摆脱空引用异常方法? 我浏览了视频 这就是永远摆脱空引用异常方法:https://www.youtube.com/watch?...视频通过演示了如何在代码中使用可空引用类型,以及如何在库和框架中注释可空性,来展示这个特性优势和注意事项。视频还解释了编译器是如何进行流分析和推断可空性,以及如何处理泛型、接口和虚方法等情况。...因为很多人是不看警告,我在很急时候也常常忽略警告,但这恰恰是 bug 之源。 最后,我希望尽可能减少代码中 null,甚至干掉业务代码中 null。我觉得这样会让我代码人生更加快乐。 4....我们不在方法中传递 null,就基本上避免了 null reference 异常了,会很省心,不用每次都检查方法返回值是否是 null,而且每次都担惊受怕,害怕自己是不是又忘了检查 null 了。...对于 Optional 对象,当它不存在时候,根本不会发生调用,也就不用担心调用某个方法会返回 null 了。 而且我在 3. 我们需要什么才能解决因 null 而产生头痛?

57840

Java 程序员必须掌握 5 个注解!

虽然这些警告名称通常在编译器实现之间有所不同,但有3种警告在Java语言中是标准化(因此在所有Java编译器实现中都很常见): unchecked:表示类型转换未经检查警告(编译器无法保证类型转换是安全...),导致发生可能原因有访问原始类型成员(参见《JLS》4.8章节)、窄参考转换或不安全向下转换(参见《JLS》5.1.6章节)、未经检查类型转换(参见《JLS》5.1.9章节)、使用带有可变参数泛型参数...(参见《JLS》8.4.1章节和下面的@SafeVarargs部分)、使用无效协变返回类型(参见《JLS》8.4.8.3章节)、不确定参数评估(参见《JLS》15.12.4.2章节),未经检查方法引用类型转换...(参见《JLS》15.13.2章节)、或未经检查lambda类型对话(参见《JLS》15.27.3章节)。...} } 在这种情况下,Java编译器会在调用站点内部创建一个数组来存储可变数量参数,但是T类型并未实现,因此在运行时会丢失。

74120

求抱抱,小王被这10道Java面试题虐哭了

小王之所以没答对这道题,是因为在他刻板印象中,finally 语句是无论如何都会执行。...静态方法也叫类方法,直接通过类名就可以调用,通过对象调用时候,IDE 会发出警告。 ? 第四题,1.0/0.0 得到结果是什么?会抛出异常吗,还是会出现编译错误?...类 C 同时继承了类 A 和类 B,类 C 对象在调用类 A 和类 B 中重写方法时,就不知道该调用类 A 方法,还是类 B 方法。...可检查(checked)异常必须在源代码中显式地进行捕获处理,不检查(unchecked)异常就是所谓运行时异常,比如说 NullPointerException、ArrayIndexOutOfBoundsException...如果是可检查异常的话,IDE 就会发出警告。 ? 第九题,下面这段代码使用了 compareTo() 方法,有问题吗?

44720

Java基础之泛型程序设计

compareTo 方法只有 Comparable 接口有该方法,所以我们要将T限制为实现了Comparable接口 类 类型擦除 无论何时定义一个泛型类型,都自动提供了一个相应原始类型,原始类型名字就是删去参数后泛型类型名...警告 public static void addAll(Collection coll,T ... ts){ for(t: ts) coll.add(t); } 现考虑以下调用...不过,对于这种情况,规则有所放松,你只会得到一个警告,而不是错误。 可以采取两种方法来抑制这个警告。...new T();bonus=new T();} 类型擦除将T改变成了Object,而且,其本意肯定不希望调用new Object()。...可以通过 `@SuppressWarnings('unchecked')` 来消除对受查异常检查。 ### 泛型类型继承规则 1.

22920

规范约束条件

但是有时我们会定义过多或过少约束条件,过多约束条件会导致其他开发人员在使用你所编写方法或类时做很多工作以满足这些约束,过少约束又会导致程序在运行时候必须做很多检查,并执行更多强制类型转化操作...要解决这些问题,我们就必须把确实需要约束写出来,这句话说起来简单,其实做起来不太容易。下面我就来讲解一下如何正确编写一个规范约束。 零、简述 何为约束?...一、如何规范约束条件 讲解之前我们先来看一个例子,这个例子判断了输入两个值是否相等。...CompareTo(t2)==0; 这段代码大大简化了前面的那段代码,并且把程序运行期可能出现错误提前到了编译期,编译器提前阻止了不符合要求用法。...我们在编写泛型类时候,最好在内部编写相互重载多个方法,这样就可以针对不同情况调用不同方法,并且其他开发人员调用起来也不会有过于严谨约束。

90710
领券