对类的泛型, 我们看一下例子:
public class Box<T> {
private T t;
private void add(T t) {
this.t = t;
}
public T get() {
return t;
}
public static void main(String[] args) {
Box<Integer> boxInt = new Box<Integer>();
boxInt.add(1);
Integer intResult = boxInt.get();
Box<String> boxStr = new Box<String>();
boxStr.add("Test");
String strResult = boxStr.get();
System.out.println("Integer Result : " + intResult);
System.out.println("String Result : " + strResult);
}
}
运行结果:
Integer Result : 1
String Result : Test
是不是很有意思, 我们写了一个类, 但这个类的类型却不适固定的, 他即可以为String, 又可以为Integer, 可以为任意定义的类型(非primitive)。
简单解释一下, T就是type, java定义的一个泛型的概念, 即不适关键字, 也不适类, 可以适应任何类型!e.g.:
当
我们传入String类型的时候, 那么T的类型就是String, 如果String strResult = boxStr.get(); 被替换成
Integer strResult = boxstr.get();就会报错, 因为类型不匹配。这样的好处就是可以再代码中发现错误。
这样的代码再我们日常编码中比较少见, 我们比较常用的只是对Collection类的一些泛型使用。但是再一些框架程序中, 我们经常可以看到这样编程的影子! 如easyMock等。
分享到:
相关推荐
此外,文件名`Java.jpg`可能表示的是一个与这个泛型例子相关的图片,可能是一个截图或者示意图,用于帮助理解泛型的概念或者`MyFirstGeneric`类的结构和用法。在实际学习过程中,视觉辅助工具往往能够帮助我们更好地...
在本例中,我们将深入探讨如何将Repeater控件与泛型数据结合使用,实现一个不依赖数据库的简单应用。 首先,让我们理解Repeater控件的工作原理。Repeater是一个非常灵活的数据呈现工具,它不会对数据进行任何格式化...
在`Generic_InterfaceDemo`项目中,我们可以创建一个简单的程序,利用泛型接口处理不同类型的数据。例如,创建一个处理数字和字符串的类,并实现`IMyGenericInterface`: ```csharp public class NumberProcessor :...
本示例以“关于体检的一个小例子应用泛型集合”为主题,旨在展示如何利用泛型集合来处理数据,这对于任何C#开发者来说都是一个实用而经典的案例。 泛型集合,如List、Dictionary, TValue>等,允许我们在定义集合时...
例如,我们可以定义一个简单的泛型类 `Box`: ```java public class Box<T> { private T item; public void setItem(T item) { this.item = item; } public T getItem() { return item; } } ``` 在这个例子...
下面是一个简单的例子: ```java public interface IFactory<T> { T create(); } public class UserAccountFactory implements IFactory<UserAccount> { @Override public UserAccount create() { return new ...
下面是一个简单的例子: ```csharp List<int> intList = new List(); // 创建一个整数列表 intList.Add(1); // 添加整数 int firstItem = intList[0]; // 访问第一个元素 ``` #### 四、泛型集合 - **List**:最...
类型参数是一个简单的标识符,它指示了用来创建一个构造类型的类型参数的占位符。类型参数是在后面将要被提供的类型的形式占位符。例如: ``` class C<T> { } ``` 这个声明定义了一个泛型类 C,其中 T 是一个类型...
.NET开发基础从简单的例子理解泛型 泛型是.NET框架中的一个重要特性,它允许开发者创建类型安全且可重用的数据结构和算法。泛型的主要优点在于提高了代码的灵活性、效率和安全性,避免了不必要的类型转换,并减少了...
例如,下面是一个简单的泛型类`Box`的例子: ```java public class Box<T> { private T content; public void setContent(T content) { this.content = content; } public T getContent() { return content;...
例如,下面是一个简单的泛型方法,用于交换两个变量的值: ```java public static <T> void swap(T[] array, int i, int j) { T temp = array[i]; array[i] = array[j]; array[j] = temp; } ``` 在这个例子中,...
以下是一个简单的枚举类型`Color`的例子: ```java public enum Color { RED, GREEN, BLUE } ``` 枚举在多处有应用,例如在表示状态、方向、星期等场景。枚举的常量可以在程序中直接使用,避免了硬编码字符串,...
以下是一个简单的非泛型类示例: ```java public class NonGenericClass { private int value; public NonGenericClass(int value) { this.value = value; } public int getValue() { return value; } ...
例如,下面是一个简单的泛型方法定义: ```csharp public T Swap(T a, T b) { T temp = a; a = b; b = temp; return a; } ``` 在这个例子中,`T`就是一个类型参数,表示这个方法可以接受任何类型的参数。 **...
- **Person** 类作为所有人的基本模型,包含了姓名(`Name`)、年龄(`Age`)等属性,并且提供了一个虚拟方法 `Introduce()` 用于返回一个简单的自我介绍字符串。 - **Student** 类继承自 `Person` 类,增加了一个 `...
要实现泛型选择排序,我们需要创建一个泛型方法,该方法接受一个IList类型的参数,其中T是我们的类型参数。IList接口提供了添加、删除和访问元素所需的方法,适合用于排序操作。 ```csharp public static void ...
例如,下面是一个简单的泛型类`MyGenericClass<T>`的定义: ```csharp public class MyGenericClass { private T value; public MyGenericClass(T initialValue) { this.value = initialValue; } public ...
例如,一个简单的模板函数可以实现两个数值的加法: ```cpp template T add(T a, T b) { return a + b; } int main() { int resultInt = add(1, 2); double resultDouble = add(1.5, 2.3); return 0; } ``` ...
考虑下面的例子,使用泛型创建一个简单的`Map`实例: ```java Map, String> map = new HashMap, String>(); map.put("key", "blarg"); String value = map.get("key"); // 不需要类型转换 ``` 在这个例子中,`Map`...
在我们的例子中,我们可以创建一个`NewsFactory`类,该类有方法如`CreateNews()`,根据传入的类型(可能是字符串,代表新闻类别)返回对应的新闻对象,利用泛型可以更高效地实现这一过程。 至于新闻阅览器的实现,...