java通过反射调用list的add方法,并证明泛型是编译期
时间: 2023-12-10 09:42:31 浏览: 35
可以通过以下代码实现:
```java
import java.lang.reflect.Method;
import java.util.ArrayList;
public class Test {
public static void main(String[] args) throws Exception {
ArrayList<Integer> list = new ArrayList<>();
Method method = list.getClass().getMethod("add", Object.class);
method.invoke(list, "hello");
System.out.println(list); // 输出 [hello]
}
}
```
在这个例子中,我们首先创建了一个泛型为Integer的ArrayList对象,然后通过反射获取到add方法,并将一个字符串类型的对象作为参数传递给该方法。由于Java中的泛型是在编译期进行类型检查的,因此在运行时,尽管我们将一个字符串类型的对象添加到了泛型为Integer的ArrayList中,但程序仍然可以正常运行。这证明了泛型是在编译期进行类型检查的。
相关问题
C sharp 语言的反射方法 泛型
C#语言的反射方法泛型是指使用反射机制来获取和操作泛型类型和泛型方法。泛型类型和泛型方法是C#语言中的重要概念,它们可以为开发者提供更加灵活和通用的编程方式。
反射机制是指在程序运行时动态地获取和操作程序中的类型信息。通过反射机制,我们可以获取类型的属性、方法、事件等信息,并且可以动态地创建对象、调用方法、设置属性等操作。
在C#语言中,我们可以使用反射机制来获取泛型类型和泛型方法的信息。例如,我们可以使用以下代码来获取一个泛型类型的信息:
Type genericType = typeof(List<>);
在上面的代码中,我们使用typeof关键字和<>符号来获取一个泛型类型List<>的信息。通过这个Type对象,我们可以获取这个泛型类型的各种信息,例如它的名称、命名空间、基类型、泛型参数等等。
除了获取泛型类型的信息之外,我们还可以使用反射机制来获取泛型方法的信息。例如,我们可以使用以下代码来获取一个泛型方法的信息:
MethodInfo genericMethod = typeof(List<>).GetMethod("Add");
在上面的代码中,我们使用GetMethod方法来获取List<>类型中的Add方法的信息。通过这个MethodInfo对象,我们可以获取这个泛型方法的各种信息,例如它的名称、返回类型、参数列表、泛型参数等等。
总的来说,C#语言的反射方法泛型是一个非常强大和灵活的编程方式。通过反射机制,我们可以动态地获取和操作程序中的类型信息,从而实现更加通用和灵活的编程方式。
c# 编写泛型list方法
下面是一个示例代码,演示了如何在C#中编写一个泛型List方法:
```csharp
using System;
using System.Collections.Generic;
class Program {
static void Main(string[] args) {
// 创建一个整数类型的List
List<int> numbers = new List<int>();
// 添加一些数据
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);
// 调用泛型List方法
PrintList(numbers);
}
// 泛型List方法
static void PrintList<T>(List<T> list) {
foreach (T item in list) {
Console.WriteLine(item);
}
}
}
```
在上面的代码中,我们首先创建了一个整数类型的List,并向其中添加了一些数据。然后,我们调用了一个名为PrintList的泛型List方法,该方法接受一个List<T>类型的参数,并使用foreach循环遍历列表中的每个元素,将其输出到控制台上。由于PrintList方法是一个泛型方法,它可以接受任何类型的List作为参数。