62,620
社区成员
发帖
与我相关
我的任务
分享public T fun(T t){
return t;
}public <T> T fun(T t){
return t;
}
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,方法的参数类型和类的参数类型并不是一个,只不过是恰好重名而已。
}
}
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";
}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); // 无论返回值与参数是否一致,只要强转了都可以
}
}
class TT
{
public <T> T get()
{
T t = null;
return t;
}
}
class TTT<T>
{
public T get()
{
T t = null;
return t;
}
}