泛型问题

yzk116688 2010-03-27 01:34:22
public T fun(T t){
return t;
}

这个我理解,如果传入的是User,然后返回User对象

但是下面这个我就不理解了:
public <T> T fun(T t){
return t;
}



为什么前面还有一个<T>?是什么意思?
...全文
202 18 打赏 收藏 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzk116688 2010-03-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 yzk116688 的回复:]
引用 2 楼 goldenfish1919 的回复:
public T fun(T t){
return t;
}
这个方法是在一个泛型类的内部定义的,泛型类本身就说明了这是一个泛型,方法就不用再说明一次了
public <T> T fun(T t){
return t;
}
这个是单独定义的一个泛型方法,当然也可以是在泛型类的内部定义,也可以是在普通的类内部,因此需要<T>来说明……
[/Quote]

这回完全明白了~~彻底清楚了~谢谢,十分感谢~~~~
rypgood 2010-03-28
  • 打赏
  • 举报
回复
public <T> T fun(T t){
是指返回的必须为T类型或者T的子类
lwtprogress 2010-03-28
  • 打赏
  • 举报
回复
长见识了啊!以前看的视频里说到泛型主要用的是hasNext()方法进行历遍,Iterator!
mouer 2010-03-28
  • 打赏
  • 举报
回复
public class Test {
public T fun(T t){ // 这里不加<T> 出错
return t;
}
}

也可以这么写:
public class Test <T> {
public T fun(T t){
return t;
}
}

<T>的作用就是确定T的类型"范围".可以是明确的String,也可以是所有类的父类Object
若鱼1919 2010-03-28
  • 打赏
  • 举报
回复

class A{
public <T> T func(T t){//这个方法就是在一个非泛型类内部定义的一个泛型方法
return t;
}
}
class B<T>{
public T func(T t){//这个方法就是在一个泛型类内部定义的一个泛型方法,<T>在类上就已经指明了,所以方法中就不用再说明了
return t;
}
}
class C<T>{
public T func(T t){//这个方法就是在一个泛型类内部定义的一个泛型方法,<T>在类上就已经指明了,所以方法中就不用再说明了
return t;
}
public <E> E func2(E e){//这个方法就是在一个泛型类内部定义的一个泛型方法,方法的泛型类型和类的泛型类型不一样
return e;
}
public <T> T func3(T t){//同func2,只不过恰好同名字而已
return t;
}
}
public class FanXing{
public static void main(String args[]){
System.out.println(new A().func("hello"));//hello
System.out.println(new B().func("hello"));//hello,但是编译的时候会有警告:
//注意:FanXing.java 使用了未经检查或不安全的操作。
//注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
System.out.println(new B<String>().func("hello"));//hello,没有警告了
System.out.println(new C<String>().func("hello"));//hello,没有警告
//System.out.println(new C<String>().func(new Integer(2)));//编译不通过,泛型约定了是String,但是却传入了一个Integer
System.out.println(new C<String>().func2(new Integer(2)));//2,因为此时方法的泛型类型跟类的泛型类型不是同一个,实际上,也可以叫T,只是为了防止混淆,看起来方便
System.out.println(new C<String>().func3(new Integer(2)));//2,方法的参数类型和类的参数类型并不是一个,只不过是恰好重名而已。
}
}
yzk116688 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 goldenfish1919 的回复:]
public T fun(T t){
return t;
}
这个方法是在一个泛型类的内部定义的,泛型类本身就说明了这是一个泛型,方法就不用再说明一次了
public <T> T fun(T t){
return t;
}
这个是单独定义的一个泛型方法,当然也可以是在泛型类的内部定义,也可以是在普通的类内部,因此需要<T>来说明这是一个泛型方法,T是泛型类型。
[/Quote]

还是没看明白,能举个实例吗?谢谢^_^
evan1027 2010-03-27
  • 打赏
  • 举报
回复
受教了!!!
magicluo 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 goldenfish1919 的回复:]
public T fun(T t){
return t;
}
这个方法是在一个泛型类的内部定义的,泛型类本身就说明了这是一个泛型,方法就不用再说明一次了
public <T> T fun(T t){
return t;
}
这个是单独定义的一个泛型方法,当然也可以是在泛型类的内部定义,也可以是在普通的类内部,因此需要<T>来说明这是一个泛型方法,T是泛型类型。
[/Quote]

这里时候到点了

如果非泛型类定义一个泛型的方法 就要用你说的

public <T> T fun(T t){
return t;

来说明这个是泛型的方法哦

如果是泛型的类, 泛型参数中已经有声明T了 所以方法返回类型前就不需要 <T>
whd3331933 2010-03-27
  • 打赏
  • 举报
回复
留住 有待以后学习
zings 2010-03-27
  • 打赏
  • 举报
回复
java 6新特性?
KAKUKYOWU 2010-03-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dj4kobe 的回复:]
class TTT<T>
{
public <T>T get()
{
T t = null;
return t;
}
}

请问这样可以吗.和没有<T>有区别吗?
[/Quote]

当然有区别,我觉得 写<T>代表任意对象类型,不写<T>就只是代表只是T类型的对象

class TTT<T> {

public <T> T get() {

T t = new T();
TT tt = new TT();

return tt.T;
}
}

class T {

String str = "test333";
}

class TT {

String T = "test44444";
}
24K純帥 2010-03-27
  • 打赏
  • 举报
回复
都写了好多代码额~
KAKUKYOWU 2010-03-27
  • 打赏
  • 举报
回复
package a;

import java.math.BigDecimal;

public class Test {

/**
* 泛型方法
*
* @param <T>
* @param t
* @return
* @author kakukyowu
*/
public <T> T fun(T t) {

return t;
}

/**
* Object方法
*
* @param o
* @return
* @author kakukyowu
*/
public Object fun2(Object o) {

return o;
}

/**
* main
*
* @param args
* @author kakukyowu
*/
public static void main(String args[]) {

Test test = new Test();

/** 泛型方法 **/
String str = (String) test.fun("test2222"); // 其实这里不用强转也行,但要求必须参数与返回值是相同的类型
BigDecimal big = (BigDecimal) test.fun("test2222"); // 如果参数和返回值是不同类型,即便强转也不允许
System.out.println(str);

/** Object方法 **/
String str2 = (String) test.fun2("test2222");
BigDecimal big2 = (BigDecimal) test.fun2(111); // 无论返回值与参数是否一致,只要强转了都可以
}
}



当然,前提是参数与返回类型都是对象,而不是int这样的基本数据类型。。。
dj4kobe 2010-03-27
  • 打赏
  • 举报
回复
class TTT<T>
{
public <T>T get()
{
T t = null;
return t;
}
}

请问这样可以吗.和没有<T>有区别吗?
TillPerfect 2010-03-27
  • 打赏
  • 举报
回复

class TT
{
public <T> T get()
{
T t = null;
return t;
}
}

class TTT<T>
{
public T get()
{
T t = null;
return t;
}
}
zhctt 2010-03-27
  • 打赏
  • 举报
回复

public <T> T fun(T t){
return t;
}
<T>是你要指定的类型
若鱼1919 2010-03-27
  • 打赏
  • 举报
回复
public T fun(T t){
return t;
}
这个方法是在一个泛型类的内部定义的,泛型类本身就说明了这是一个泛型,方法就不用再说明一次了
public <T> T fun(T t){
return t;
}
这个是单独定义的一个泛型方法,当然也可以是在泛型类的内部定义,也可以是在普通的类内部,因此需要<T>来说明这是一个泛型方法,T是泛型类型。
config_man 2010-03-27
  • 打赏
  • 举报
回复
说实话,我也一直不明白这个问题。
代码下载链接: https://pan.quark.cn/s/a4b39357ea24 用户账户控制(UAC)白名单的配置 Windows7环境中 UAC(User Account Control,用户帐户控制)是由微软在Windows Vista版本中推出的一项旨在增强系统安全性的创新技术,该技术强制要求用户在执行可能干扰计算机正常运作的操作或进行更改会波及其他用户设置的变动前,必须提供相应的权限或管理员密码进行验证。通过对这些操作启动前进行授权确认,UAC能够有效阻止恶意软件及间谍软件在未获授权的状态下于计算机内进行安装或实施修改。 自从Vista版本问世以来,微软便开始推行这一全新的安全机制,可视为对系统安全防护的显著提升。尽管UAC确实能够在一定程度上对某些非法程序起到防御作用,但与此同时,这一功能也给众多用户带来了诸多不便。 因此,许多用户开始探寻是否存在类似于白名单的功能,以便将那些值得信赖的程序直接赋予运行权限。事实上,这类功能确实存在,不过微软并未将其作为标准配置提供。 网络上关于此问题的绝大多数建议都是建议禁用UAC,这种说法显然缺乏针对性,因为若用户希望禁用此功能,本就不会提出相关疑问。 通过运用微软官方发布的Microsoft Application Compatibility Toolkit 5.6版本,可以将信任的程序纳入系统白名单范畴。 获取Application Compatibility Toolkit 安装程序成功后会出现三个可执行文件 以管理员身份启动Compatibility Administrator 在Custom DataBases部分创建新的数据库,并添加一个Application Fix(在下方空白处点击右键,选择...

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧