在做 <Java编程思想>(4th)的15.4.5的代码的时候碰到一个问题:
代码如下
import java.io.ByteArrayOutputStream; public class Tuple { static TwoTuple<String, Integer> f() { return tuple("hi", 47); } static TwoTuple f2(){ return tuple(new ByteArrayOutputStream(), 47); } public static <A,B> TwoTuple<A,B> tuple(A a ,B b) { return new TwoTuple<A, B>(a, b); } public static void main(String[] args) { TwoTuple<String, Integer> tt = f(); TwoTuple<Boolean, Integer> tt2 = f2(); // 这里的代码不会有警告 System.out.println(tt); System.out.println(tt2); } }
public class TwoTuple<A,B> { private final A a ; private final B b ; public TwoTuple(A f , B s) { // TODO Auto-generated constructor stub a= f; b=s; } @Override public String toString() { // TODO Auto-generated method stub return "a : " +a+ " ; b : "+b; } }
f2()方法返回的是无参数化的TwoTuple对象
我现在将它转型为带参数的,编译器不会有任何提醒,而且会代码正常运行
如果换用f() 或者 TwoTuple 的构造器 会报错
这是为什么?
相关推荐
在C#编程中,泛型列表`List<T>`是一个非常重要的数据结构,它为我们提供了动态数组的功能,并且具有类型安全的特性。这篇文章将深入探讨`List<T>`的使用,包括其基本操作、性能特点以及一些高级用法。 一、基础概念...
例如,我们可以创建一个名为`GenericContainer<T>`的泛型类,其中`T`就是类型参数。这个类可以存储任何类型的对象,但具体类型在实例化时确定。这样做的好处是,我们无需为每种可能的数据类型创建单独的类,从而提高...
Json转换为实体;Json转换为IList<T>;实体转换为Json;IList<T>转换为Json;
在这个“dictionary<>泛型数据案例”中,我们将深入探讨`Dictionary<,>`类以及与其相关的`List<T>`泛型集合的使用。 首先,让我们了解什么是泛型。泛型是.NET框架中的一个强大特性,它允许我们在定义类型(如类、...
在使用泛型类时,需要在类名后面添加“<>”并指定具体的类型,例如:`ShowObject<Dog> showDog = new ShowObject<Dog>();` 泛型接口的声明使用“interface 名称 < 泛型列表 >”的格式,例如:`interface Listen<E> ...
泛型类可以有多个类型参数,并为每个参数指定约束,如`SuperKeyType<K, V, U> where U : System.IComparable<U>, where V : new()`。 5. **泛型类作为方法参数** 开放式构造类型和封闭式构造类型都可以作为方法...
例如,`List<String>` 是一个参数化类型,`List` 是泛型类,`String` 是具体的类型。 4. 原始类型 原始类型是指参数化类型的泛型类的 Class。例如,`List` 的原始类型是 `List`,`List[]` 的原始类型也为 `List`。...
- 泛型类的实例化必须提供实际类型参数,如`MyList<String> list = new MyList<>();` - 对于无参构造的泛型类,可以使用匿名内部类的方式省略尖括号,如`new MyList<String>() {}`。 9. 泛型和静态方法: - 泛型...
非常方便的datatable类型与List<>泛型实体对象集合的互相转换,在面向对象的开发中,经常会用到的,如使用上不懂可以咨询我
在Java编程语言中,泛型是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而提高代码的灵活性和可复用性。当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,...
4. **利用`Class<T>`作为泛型约束**:有时候,我们可以在泛型类中使用`Class<T>`作为参数或字段,这样可以在运行时获取类型信息。例如: ```java public class MyClass<T> { private final Class<T> clazz; ...
- 类型擦除:Java编译器会进行类型擦除,将泛型类的实例转换为无参数类型,但会在编译时进行类型检查。 3. 泛型接口: - 定义与实例化与泛型类类似,例如 `interface MyInterface<T> { ... }`,然后 `MyInterface...
通过使用泛型,我们可以定义类型参数化的类或方法,从而避免了代码重复并且可以在运行时提供类型检查。 #### 2. 泛型类Stack<E> 在这个实验中,我们需要实现一个泛型类`Stack<E>`。其中`E`表示任何类型的元素。...
例如,`List<T>` 是一个常见的泛型类,其中 T 表示存储元素的类型。这样,我们可以创建 `List<int>`、`List<string>` 或任何其他类型的列表,确保类型一致性并避免装箱和拆箱操作。 ```csharp public class ...
* 集合框架:泛型可以用于集合框架中,例如List<T>、Map<T,U>等。 * DAO设计模式:泛型可以用于DAO设计模式中,例如BaseHibernateEntityDao<T>等。 * 工具类:泛型可以用于工具类中,例如工具类的静态方法可以使用...
泛型类vector<T>源码分析
9. **类型推断**:自JDK 7起,Java引入了类型推断,使得在某些情况下,编译器可以根据上下文自动推断出类型参数,简化代码,如`List<String> list = new ArrayList<>()`。 通过阅读SUN公司的Java泛型编程文档,你...
在类定义中使用尖括号(<>)来声明类型参数,例如: ```java public class Container<T> { private T item; public void set(T item) { this.item = item; } public T get() { return item; } } ``` 在...
泛型是一种在编译时检查类型安全的技术,允许开发者在定义类、接口和方法时指定参数类型。这使得容器(如List、Set等)可以持有特定类型的元素,而不是Object。泛型的主要优点包括:类型检查、类型转换的自动完成...