带extends的泛型方法
时间: 2023-07-08 14:12:31 浏览: 55
带有extends限定符的泛型方法表示该方法接受的泛型参数必须是指定类型的子类或者实现类。例如:
```java
public <T extends Number> void printNumber(T number) {
System.out.println(number);
}
```
上述方法中,<T extends Number>表示T必须是Number的子类或者实现类,这样我们就可以在方法中安全地使用Number类的方法,例如intValue()、doubleValue()等。
另外,需要注意的是,带有extends限定符的泛型方法中,泛型参数只能用于接收数据,而不能用于返回数据。如果需要返回数据,可以使用带有super限定符的泛型方法。
相关问题
泛型方法必须在方法返回值前指定泛型
是的,泛型方法必须在方法返回值前指定泛型。泛型方法的语法如下:
```
修饰符 <T> 返回值类型 方法名(参数列表) {
// 方法体
}
```
其中 `<T>` 表示泛型参数,可以在方法返回值类型和方法名之间定义。在方法体中,可以使用泛型参数 `T` 来声明变量、方法参数、返回值等。
例如,下面是一个简单的泛型方法示例,该方法接受两个参数并返回较大的那个值:
```
public static <T extends Comparable<T>> T max(T a, T b) {
if (a.compareTo(b) > 0) {
return a;
} else {
return b;
}
}
```
在这个方法中,`<T extends Comparable<T>>` 表示泛型参数 `T` 必须是实现了 `Comparable` 接口的类或接口。这样,我们就可以使用 `compareTo` 方法来比较 `a` 和 `b` 的大小,并返回较大的那个值。
mapper文件写泛型方法代码
在MyBatis的mapper文件中,可以使用泛型方法来实现通用的增删改查操作。下面是一个示例代码:
```xml
<!-- 定义一个通用的mapper接口 -->
public interface BaseMapper<T> {
int insert(T record);
int deleteByPrimaryKey(Integer id);
int updateByPrimaryKey(T record);
T selectByPrimaryKey(Integer id);
}
<!-- 在mapper文件中使用泛型方法 -->
<mapper namespace="com.example.mapper.BaseMapper">
<insert id="insert" parameterType="T">
INSERT INTO ${tableName} (${columns}) VALUES (${values})
</insert>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
DELETE FROM ${tableName} WHERE id = #{id}
</delete>
<update id="updateByPrimaryKey" parameterType="T">
UPDATE ${tableName} SET ${setColumns} WHERE id = #{id}
</update>
<select id="selectByPrimaryKey" resultType="T">
SELECT * FROM ${tableName} WHERE id = #{id}
</select>
</mapper>
```
这样,我们就可以通过继承BaseMapper接口来实现对任意类型的表进行增删改查操作了。例如:
```java
public interface UserMapper extends BaseMapper<User> {
// 自定义查询方法
List<User> selectByUsername(String username);
}
```