Java泛型与函数类型
最近我读了很多关于泛型的书Java泛型与函数类型,java,generics,Java,Generics,最近我读了很多关于泛型的书 public static <T extends CharSequence> void prnt(T obj); public static void prnt(CharSequence obj); publicstaticvoidprnt(T obj); 公共静态无效prnt(CharSequence obj); 两者之间有什么区别吗?对于你的例子来说,这并没有什么区别 下面是一个不同的例子: public static CharSeque
public static <T extends CharSequence> void prnt(T obj);
public static void prnt(CharSequence obj);
publicstaticvoidprnt(T obj);
公共静态无效prnt(CharSequence obj);
两者之间有什么区别吗?对于你的例子来说,这并没有什么区别 下面是一个不同的例子:
public static CharSequence foo1(CharSequence c) {...}
public static <T extends CharSequence> T foo2(T t) {...}
正如您所期望的那样,它工作得很好
CharSequence c1 = foo1(s);
String s2 = foo2(s);
这里我们看到了为什么使用泛型声明函数是有意义的。使用
我们可以强制执行该函数仅与CharSequence
的子类一起工作,而不会丢失有关实际类型的信息。另一方面,第一种方法将丢失这些信息,甚至可能迫使你进行一次非常丑陋的施法。在你的情况下,他们是平等的,
他们都致力于实现CharSequence的东西
在一般情况下,他们根本不平等强>
例如,设想在第一种情况下返回T,在第二种情况下返回CharSequence,如下所示:
public static <T extends CharSequence> T prnt(T obj);
public static CharSequence prnt(CharSequence obj);
正如你所看到的,他们根本不平等 如果您编写这两个方法,编译它们,然后使用javap查看字节码,您可以自己查看。
public static <T extends CharSequence> T prnt(T obj);
public static CharSequence prnt(CharSequence obj);
public static CharBuffer prnt(CharBuffer obj);
public static CharSequence prnt(CharSequence obj);