当你有一个方法,我明白,这是有道理的声明它的通用,这样我可以采取通用的参数。 像这样:
public <T> void function(T element) {
// Some code...
}
但究竟什么是落后使全班通用,如果我可以简单地声明每个方法通用的想法?
当你有一个方法,我明白,这是有道理的声明它的通用,这样我可以采取通用的参数。 像这样:
public <T> void function(T element) {
// Some code...
}
但究竟什么是落后使全班通用,如果我可以简单地声明每个方法通用的想法?
那么,不同的是,如果你试图让每个方法类通用你会在你的发言权使用firstGenericMethod可能会或可能不会是相同的type.What我指的是一般类型的。
public <T> void firstGenMethod(...){
}
public <T> void secondGenMethod(...){
}
测试:
SomeClass ref = new SomeClass();
ref.firstGenMethod("string");
ref.secondGenMethod(123);//legal as this generic type is not related to the generic type which is used by firstGenMethod
在上述情况下,没有gaurentee这两种方法都有相同的通用type.It取决于你如何调用它们。 如果您的类,但是通用的,类型被应用到类中的所有方法。
class Test<T>{
public void firstGenMethod(T t){
}
public void secondGenMethod(T t){
}
}
测试:
Test<String> testingString = new Test<>();
testingString.firstGenMethod("abc");
testingString.firstGenMethod(123);// invalid as your Test class only expects String in this case
你通常会想办法让你的类通用的,你会想这个类的整个行为(方法)对同一类型的处理。 最好的例子是类在Java集合框架
看一看集合类。 取List<T>
作为一个例子。 如果类没有宣布通用的,你将如何确保只有正确的类的元素可以被插入到列表中? 以及你如何会知道你会得到什么时调用ArrayList.get(i)
?
确切地说,enfore表示,在这个类的所有方法适用于某一特定类型。
这是典型的“容器”类中。 如果你正在构建一个列表,你让通用的,你要确保添加元素,让元素,迭代,等...总是使用相同的类型。
正如你提到的,这也可以让你使用某种类型的实例变量,并且有几种方法使用这个实例中连贯的方式(也许还,影响它...)。
如果你有一类就是“一般的”有几种不同的类型,它可能是你真的在一个写两个泛型类的标志......(虽然这可能是一个合法的事情。)
其主要思想是开往type.The最好的例子类/方法的概念是Generics
编程language.It是多态的实际应用
泛型类封装不是特定于特定数据类型的操作。 对于泛型类最常见的用途是一个像链表,哈希表,栈,队列,树的集合等在那里,如添加和删除收集的项目操作在几乎相同的方式数据彼此的类型进行不分存储。
对于需要集合类大多数情况下,推荐的方法是使用的编程语言提供的。
从Reffering 甲骨文文档
一个通用的类型是在参数类型的通用类或接口
public class Box {
private Object object;
public void set(Object object) { this.object = object; }
public Object get() { return object; }
}
通过一般可以严格它
public class Box<T> {
// T stands for "Type"
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
我也建议你看看这个教程