0 0

转型为参数化类编译器无警告<泛型相关>5

在做 <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 的构造器  会报错 

这是为什么?

 

 


问题补充:使用new ByteArrayOutputStream()是故意测试的
这段代码没有实际意义
2014年4月21日 15:06
目前还没有答案

相关推荐

    C#重要知识之——泛型列表List例子

    在C#编程中,泛型列表`List&lt;T&gt;`是一个非常重要的数据结构,它为我们提供了动态数组的功能,并且具有类型安全的特性。这篇文章将深入探讨`List&lt;T&gt;`的使用,包括其基本操作、性能特点以及一些高级用法。 一、基础概念...

    C#泛型类、泛型方法、泛型接口、泛型委托的实例

    例如,我们可以创建一个名为`GenericContainer&lt;T&gt;`的泛型类,其中`T`就是类型参数。这个类可以存储任何类型的对象,但具体类型在实例化时确定。这样做的好处是,我们无需为每种可能的数据类型创建单独的类,从而提高...

    Json与实体相互转换,支持IList泛型

    Json转换为实体;Json转换为IList&lt;T&gt;;实体转换为Json;IList&lt;T&gt;转换为Json;

    dictionary<>泛型数据案例

    在这个“dictionary&lt;&gt;泛型数据案例”中,我们将深入探讨`Dictionary&lt;,&gt;`类以及与其相关的`List&lt;T&gt;`泛型集合的使用。 首先,让我们了解什么是泛型。泛型是.NET框架中的一个强大特性,它允许我们在定义类型(如类、...

    泛型与集合框架.ppt

    在使用泛型类时,需要在类名后面添加“&lt;&gt;”并指定具体的类型,例如:`ShowObject&lt;Dog&gt; showDog = new ShowObject&lt;Dog&gt;();` 泛型接口的声明使用“interface 名称 &lt; 泛型列表 &gt;”的格式,例如:`interface Listen&lt;E&gt; ...

    浅谈c# 泛型类的应用

    泛型类可以有多个类型参数,并为每个参数指定约束,如`SuperKeyType&lt;K, V, U&gt; where U : System.IComparable&lt;U&gt;, where V : new()`。 5. **泛型类作为方法参数** 开放式构造类型和封闭式构造类型都可以作为方法...

    Java 泛型最全指南(定义和使用+继承泛型类/实现泛型接口+泛型的边界+通配符+类型擦除)

    例如,`List&lt;String&gt;` 是一个参数化类型,`List` 是泛型类,`String` 是具体的类型。 4. 原始类型 原始类型是指参数化类型的泛型类的 Class。例如,`List` 的原始类型是 `List`,`List[]` 的原始类型也为 `List`。...

    关于java基础的泛型的练习

    - 泛型类的实例化必须提供实际类型参数,如`MyList&lt;String&gt; list = new MyList&lt;&gt;();` - 对于无参构造的泛型类,可以使用匿名内部类的方式省略尖括号,如`new MyList&lt;String&gt;() {}`。 9. 泛型和静态方法: - 泛型...

    .net 中datatable与list泛型实体对象的互相转换

    非常方便的datatable类型与List&lt;&gt;泛型实体对象集合的互相转换,在面向对象的开发中,经常会用到的,如使用上不懂可以咨询我

    java 带两个类型参数的泛型

    在Java编程语言中,泛型是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而提高代码的灵活性和可复用性。当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,...

    java 泛型类的类型识别示例

    4. **利用`Class&lt;T&gt;`作为泛型约束**:有时候,我们可以在泛型类中使用`Class&lt;T&gt;`作为参数或字段,这样可以在运行时获取类型信息。例如: ```java public class MyClass&lt;T&gt; { private final Class&lt;T&gt; clazz; ...

    Java泛型_Java中的泛型结构_

    - 类型擦除:Java编译器会进行类型擦除,将泛型类的实例转换为无参数类型,但会在编译时进行类型检查。 3. 泛型接口: - 定义与实例化与泛型类类似,例如 `interface MyInterface&lt;T&gt; { ... }`,然后 `MyInterface...

    1.泛型类 、通配符的使用、通配符的上限和下限 编写泛型类Stack<E>,该类中定义一个成员变量和如下方法:

    通过使用泛型,我们可以定义类型参数化的类或方法,从而避免了代码重复并且可以在运行时提供类型检查。 #### 2. 泛型类Stack&lt;E&gt; 在这个实验中,我们需要实现一个泛型类`Stack&lt;E&gt;`。其中`E`表示任何类型的元素。...

    c#泛型类、泛型方法、泛型接口、泛型委托

    例如,`List&lt;T&gt;` 是一个常见的泛型类,其中 T 表示存储元素的类型。这样,我们可以创建 `List&lt;int&gt;`、`List&lt;string&gt;` 或任何其他类型的列表,确保类型一致性并避免装箱和拆箱操作。 ```csharp public class ...

    Java泛型的用法及T.class的获取过程解析

    * 集合框架:泛型可以用于集合框架中,例如List&lt;T&gt;、Map&lt;T,U&gt;等。 * DAO设计模式:泛型可以用于DAO设计模式中,例如BaseHibernateEntityDao&lt;T&gt;等。 * 工具类:泛型可以用于工具类中,例如工具类的静态方法可以使用...

    泛型类vector<T>源码分析

    泛型类vector&lt;T&gt;源码分析

    SUN公司Java泛型编程文档

    9. **类型推断**:自JDK 7起,Java引入了类型推断,使得在某些情况下,编译器可以根据上下文自动推断出类型参数,简化代码,如`List&lt;String&gt; list = new ArrayList&lt;&gt;()`。 通过阅读SUN公司的Java泛型编程文档,你...

    java 继承泛型类示例

    在类定义中使用尖括号(&lt;&gt;)来声明类型参数,例如: ```java public class Container&lt;T&gt; { private T item; public void set(T item) { this.item = item; } public T get() { return item; } } ``` 在...

    java泛型BaseDao与BaseService

    泛型是一种在编译时检查类型安全的技术,允许开发者在定义类、接口和方法时指定参数类型。这使得容器(如List、Set等)可以持有特定类型的元素,而不是Object。泛型的主要优点包括:类型检查、类型转换的自动完成...

Global site tag (gtag.js) - Google Analytics