Java 基础一些代码练习笔记( GenericFoo<T> 泛型)

本文详细介绍了Java中泛型的应用,并通过实例展示了如何使用泛型类和集合类,包括设置和获取对象、数组操作及集合类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.lee2;

public class GenericFoo<T>
{
	private T foo;

	public T getFoo()
	{
		return foo;
	}

	public void setFoo(T foo)
	{
		this.foo = foo;
	}
	
	public static void main(String[] args)
	{
		GenericFoo<Boolean> foo1 = new GenericFoo<Boolean>();
		GenericFoo<Integer> foo2 = new GenericFoo<Integer>();
		
		foo1.setFoo(new Boolean(false));
		foo2.setFoo(new Integer(3));
		
		Boolean b = foo1.getFoo();
		Integer i = foo2.getFoo();
		
		System.out.println(b);
		System.out.println(i);
		
	}
}

package com.lee2;

public class Generic2<T>
{
	private T [] fooArray;

	public T[] getFooArray()
	{
		return fooArray;
	}

	public void setFooArray(T[] fooArray)
	{
		this.fooArray = fooArray;
	}
	
	public static void main(String[] args)
	{
		Generic2<String> foo = new Generic2<String>();
		
		String [] str1 = {"hello", "world", "welcome"};
		String [] str2 = null;
		
		 foo.setFooArray(str1);
		 str2 = foo.getFooArray();
		 
		 for(int i = 0; i < str2.length; i++)
		 {
			 System.out.println(str2[i]);
		 }
		
		
	}
}

package com.lee2;

public class GenericFoo<T>
{
	private T foo;

	public T getFoo()
	{
		return foo;
	}

	public void setFoo(T foo)
	{
		this.foo = foo;
	}
	
	public static void main(String[] args)
	{
		GenericFoo<Boolean> foo1 = new GenericFoo<Boolean>();
		GenericFoo<Integer> foo2 = new GenericFoo<Integer>();
		
		foo1.setFoo(new Boolean(false));
		foo2.setFoo(new Integer(3));
		
		Boolean b = foo1.getFoo();
		Integer i = foo2.getFoo();
		
		System.out.println(b);
		System.out.println(i);
		
	}
}

package com.lee2;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetTest
{
	public static void main(String[] args)
	{
		Set<String> set = new HashSet<String>();
		
		set.add("aa");
		set.add("bb");
		set.add("cc");
		
		for(Iterator<String> iter = set.iterator(); iter.hasNext();)
		{
			String value = iter.next();
			System.out.println(value);
		}
		
		System.out.println("------------------");
		
		Set<People> set2 = new HashSet<People>();
		
		set2.add(new People("zhangsan",20 , "Beijing"));
		set2.add(new People("lisi",30 ,"shanghai"));
		set2.add(new People("wangwu", 40 ,"tianjin"));
		
		for(Iterator<People> iter = set2.iterator(); iter.hasNext();)
		{
			People people = iter.next();
			
			String name = people.getName();
			int age = people.getAge();
			String address = people.getAddress();
			
			System.out.println(name + "," + age + "," + address);
		}
	}
}

class People
{
	public String getName()
	{
		return name;
	}

	public int getAge()
	{
		return age;
	}

	public String getAddress()
	{
		return address;
	}

	private String name;
	private int age;
	private String address;
	
	public People(String name, int age, String address)
	{
		this.name = name;
		this.address = address;
		this.age = age;
	}

	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = 1;
		result = prime * result + ((address == null) ? 0 : address.hashCode());
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj)
	{
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		People other = (People) obj;
		if (address == null)
		{
			if (other.address != null)
				return false;
		}
		else if (!address.equals(other.address))
			return false;
		if (age != other.age)
			return false;
		if (name == null)
		{
			if (other.name != null)
				return false;
		}
		else if (!name.equals(other.name))
			return false;
		return true;
	}
	
}



















<think>好的,我需要帮助用户理解Java中的ResultBean<T>的含义及用法。首先,我应该从的基本概念入手,解释为什么需要。根据引用[4],没有时,返回的Object需要强制转换,容易出错。可以避免这种情况,提高代码的安全性和可读性,如引用[2]提到的代码简洁和健壮性。 接下来,ResultBean<T>的具体意义。这里可能需要结合引用中的内容。ResultBean通常是一个通用的返回类,用于封装结果数据、状态码等信息。T代表参数,允许在运行时指定具体类,这样不同的方法可以返回不同类的数据,而无需每个类都单独定义ResultBean。例如,引用[3]提到的BaseServiceImpl使用来增强扩展性,同样,ResultBean<T>通过提供灵活性。 然后,用法方面,用户可能需要知道如何定义和使用ResultBean<T>。比如,定义一个类时使用T,内部包含数据字段、状态码等。使用时,可以指定T为具体类,如ResultBean<String>或ResultBean<User>,这样获取数据时无需强制转换,直接得到正确类,减少错误。 此外,需要提到PECS原则(Producer Extends, Consumer Super),引用[1]指出,从类取数据用extends,写入数据用super。这可能与ResultBean的设计相关,如果ResultBean作为生产者提供数据,可能使用extends限定,但通常ResultBean<T>直接持有T类的数据,所以可能更常见的是直接使用T而不使用通配符。 最后,结合用户提供的引用,特别是引用[3]关于通用API和扩展性的内容,可以说明ResultBean<T>如何提升项目的扩展性和代码复用,通过统一返回结构,同时支持不同类的数据返回。 总结回答结构:先解释的作用,再介绍ResultBean<T>的结构和设计目的,接着说明其用法和优点,最后结合引用中的知识点强调其在实际项目中的应用价值。</think>### Java `ResultBean<T>` 的含义及用法 #### 1. **的作用与意义** (Generics)的核心目的是通过类参数化,提升代码的**安全性**和**复用性**。例如: - **避免强制类转换**:引用[2]提到,没有时需将返回的`Object`强制转换为具体类,容易引发`ClassCastException`[^4]。而通过编译时类检查,直接提供具体类的数据,例如`ResultBean<String>`。 - **代码简洁性**:代码更清晰,如引用[2]所述,集合可直接声明存储类(如`List<String>`),减少冗余代码[^2]。 #### 2. **`ResultBean<T>` 的定义与结构** `ResultBean<T>` 是一种通用的封装类,通常用于统一接口返回值格式,包含以下典字段: - `code`(状态码,如200表示成功) - `message`(提示信息,如“操作成功”) - `data`(核心数据,类`T`) 示例代码: ```java public class ResultBean<T> { private int code; private String message; private T data; // 字段 // 构造方法、Getter/Setter 略 } ``` #### 3. **`ResultBean<T>` 的用法** - **声明具体类**:通过指定`T`为实际类,明确返回值内容。例如: ```java ResultBean<User> result = new ResultBean<>(); result.setData(new User("Alice")); // 直接操作 User 类,无需强制转换 ``` - **统一接口返回值**:所有接口返回均使用`ResultBean<T>`,前端可直接解析固定格式。例如: ```json { "code": 200, "message": "success", "data": {"name": "Alice"} } ``` #### 4. **设计优势** - **类安全**:引用[4]指出,消除了运行时的类转换错误风险[^4]。 - **扩展性**:如引用[3]所述,为项目提供灵活扩展能力,例如不同模块可复用`ResultBean<T>`,只需替换`T`为具体实体类(如`User`、`Order`)[^3]。 - **代码复用**:无需为每种数据类单独编写`ResultBean`类。 #### 5. **PECS 原则的关联** 引用[1]提到“从类取数据时用`extends`,写入数据时用`super`”[^1]。虽然`ResultBean<T>`通常直接操作`T`,但若需更复杂的类限制(如数据来源为子类),可结合通配符: ```java // 从 ResultBean 读取数据时,支持 T 及其子类 ResultBean<? extends Serializable> result = getResult(); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值