四,Java泛型、静态导入和可变参数

news/2024/10/21 19:31:46

Java泛型、静态导入和可变参数的详细指南

在Java编程中,泛型、静态导入和可变参数是提高代码的重用性、类型安全和灵活性的重要特性。这些特性使得Java程序更加强大和易于维护。本文将详细介绍这些特性的使用方法和注意事项,并提供丰富的代码示例。

泛型

泛型是Java 5引入的一项特性,它允许类、接口和方法在被实例化或被调用时指定类型参数。泛型提供了编译时类型安全检查,避免了强制类型转换和ClassCastException。

泛型的种类

泛型类

public class Box<T> {private T t;public void set(T t) { this.t = t; }public T get() { return t; }
}// 使用
Box<Integer> integerBox = new Box<>();
integerBox.set(10);
System.out.println(integerBox.get());Box<String> stringBox = new Box<>();
stringBox.set("Hello");
System.out.println(stringBox.get());

泛型方法

public <E> void printArray(E[] array) {for (E element : array) {System.out.print(element + " ");}System.out.println();
}// 使用
printArray(new Integer[]{1, 2, 3});
printArray(new String[]{"Hello", "World"});

泛型接口

public interface Generator<T> {public T next();
}// 实现
public class RandomIntegerGenerator implements Generator<Integer> {public Integer next() {return new Random().nextInt();}
}// 使用
Generator<Integer> generator = new RandomIntegerGenerator();
System.out.println(generator.next());

高级使用

通配符

// 无限制通配符
public void process(List<?> list) {for (Object obj : list) {System.out.println(obj);}
}// 有限制通配符
public void process(List<? extends Number> list) {for (Number num : list) {System.out.println(num.intValue());}
}// 超类通配符
public void process(List<? super String> list) {list.add("Hello");
}

静态导入

静态导入允许直接访问类中的静态方法和静态变量,无需使用类名作为前缀。这使得代码更加简洁。

静态导入的格式

import static java.lang.Math.PI;
import static java.lang.Math.sqrt;public class MathTest {public static void main(String[] args) {System.out.println("PI: " + PI);System.out.println("Square root of 4: " + sqrt(4));}
}

注意事项

  • 只能导入静态方法和变量。
  • 如果有多个同名的静态方法,需要使用类名前缀来区分。

可变参数

可变参数允许方法接受任意数量的参数,这些参数被存储在一个数组中。

可变参数的格式

public void printNumbers(int... numbers) {for (int number : numbers) {System.out.println(number);}
}// 使用
printNumbers(1, 2, 3, 4, 5);

注意事项

  • 可变参数必须是方法的最后一个参数。
  • 可变参数实际上是一个数组。

结论

泛型、静态导入和可变参数是Java中提高代码质量和可维护性的三个重要特性。泛型提供了类型安全,静态导入简化了代码,可变参数增加了方法的灵活性。理解和正确使用这些特性,可以让你的Java程序更加健壮和高效。通过上述详细的代码示例和解释,你应该能够更好地理解和应用这些特性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【小 w 的代数】(提供一种 n^2 log 的解法)

前言:卖点记录 CTH 的发言CTH:你这真是 n^3 的 CTH:我也不知道你线段树优化个啥,\(n^3 \log n\) CTH:你优化到哪了啊 CTH:你从赛时打这个题到现在 11 个小时了,你从 \(n^3\) 打到 \(n^3\log n\) 了 CTH:再怎么着,我也不会一道题调三天 CTH:我一直都说这么打这么打,你…

CSS速刷 - 预处理器

预处理器是什么?less Sass 预处理器有啥功能?嵌套,反映了层级和约束 变量和计算,减少了重复代码 Extend和Mixin代码片段,就像具备同一个功能的函数。 循环,适用于复杂有规律的样式 import CSS文件模块化1. less嵌套 Node写的,通过npm发布。 &:同一层级2. Sass嵌套 输…

模拟赛总结(三)

2024.9.16 重新定义饮料为一大杯冰沙 胃:这把生死局(指抿一口就开始起反应...) 早上就不停反呕,下午整这一出真是笑嘻了 T1 不相邻集合 以为贪心假的,结果对了 就是对新加的数看看有没有左邻右舍被取过,没有就计入答案 code T2 线段树 暴力\(20\) 考虑到线段树开点方式,…

CentOS7下安装Mysql8.4

一、检查 先检查下有没有安装过MySql ps ajx | grep mysql #检查 是否有 mysql 的进程 ps ajx | grep mariabd #检查 是否有 mariabd 的进程如果有,先停掉 systemctl stop mysqld #关闭进程再看是否有Mysql安装包 rpm -qa | grep mysql如果有,批量化删除安装包 rpm -qa …

高等数学 7.5可降阶的高阶微分方程

目录一、\(y^{(n)} = f(x)\) 型的微分方程二、\(y = f(x, y)\) 型的微分方程三、\(y = f(y, y)\) 型的微分方程 一、\(y^{(n)} = f(x)\) 型的微分方程 微分方程 \[y^{(n)} = f(x) \tag{1} \]的右端仅含有自变量 \(x\) 。容易看出,只要把 \(y^{(n - 1)}\) 作为新的未知函数,那…

GD-WLAN登录页面抓包及curl模拟方法

摘要: 校园网Web认证界面点击登录时会发送一个 Post 请求,密码使用时间戳作为密钥进行 RC4 加密(后经验证,时间戳可为任意值),服务器根据密钥解密并验证账户与密码,验证通过便可以正常上网。因而可以采用curl等工具模拟 Post 请求,完成登录。实现路由器、服务器、手机、…

20241021

今天的模拟赛打的比较舒服。 但是还要早起跑操+早读+升旗就不太好。 去升旗之前做了第一题,简单的模拟,感觉这很符合cspsT1的难度啊,之前的感觉都有点难了。【贪吃蛇】 题意: