您好,今天我将在Java中谈论仿制药,本文的重点是试图了解Java的初学者。
generics是一种不确定的类型,可以假设任何形式,已将其添加到Java中,以避免过多的代码或施放重复。
为了更清楚,我们将创建一个需要打印对象的方案,但我们不知道哪种类型会使用我们的方法。
我将创建动物摘要类,并将其从两个 dog 和 cat 类扩展。
abstract class Animal {
public abstract void search();
}
class Dog extends Animal {
String dog;
public Dog(String dog) {
this.dog = dog;
}
@Override
public void search() {
System.out.println("find Dog");
}
// Method to string was omitted.
}
class Cat extends Animal {
String cat;
public Cat(String cat) {
this.cat = cat;
}
@Override
public void search() {
System.out.println("find Cat");
}
// Method to string was omitted.
}
现在,让我们创建一种方法来在终端上呈现对象的信息,通常,我们可以定义每个具有一个toString()的方法,都可以通过所谓的打印来表示。我们可以看到,在类打印机()中,我们没有要在构建器上传递的特定类型,它可以是任何对象,方法打印将显示信息,如果它没有方法toString()对象的内存地址将介绍。这种方法是,在某些情况下,我们想提供一些有关调试的信息,我们可以调用此方法。
class Printer <T> {
T toPrint;
public Printer(T toPrint) {
this.toPrint = toPrint;
}
public void print() {
System.out.println(toPrint);
}
}
案例01:
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Dog");
Cat cat = new Cat("Cat");
Printer<Integer> printer = new Printer(dog);
printer.print();
}
}
现在让我们创建一种打印列表的方法。
public static void printAnimal(List<? extends Animal> animals) {
animals.stream().forEach(a -> a.search());
}
在此方法中,将列表的类型定义为任何类型的动物延伸,一个重要的信息是,我们不能在列表中添加任何内容,因为编译时间中的Java不知道列表中的内容,因此我们将汇编时间有错误而不是执行。
在这种方法中,我们所有人都将拥有包含猫和狗的动物扩展,这确保了我们的防御性编程,以确保我们只展示我们想要的东西,而无需以外的东西。
案例02:
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Dog");
Cat cat = new Cat("Cat");
List<Dog> dogList = Arrays.asList(dog);
List<Cat> catList = Arrays.asList(cat);
List<Animal> animals = Arrays.asList(dog, cat);
printAnimal(dogList);
printAnimal(catList);
printAnimal(animals);
}
}
现在,我将提出最后一个旨在创建2个不同类型对象的列表的情况。
public static <T, V> List<Object> createList(T thing, V otherThing) {
return Arrays.asList(thing, otherThing);
}
此方法可以创建不同类型的列表,而不必担心会插入的内容,这在我们有可能接收到无法预期的信息时很有用,因此我们可以保证我们能够能够接收信息并稍后对待。
在这种情况下,我们只会在终端上打印对象,但是想法是基本理解以应用于更大的东西。
案例03:
public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Dog");
Cat cat = new Cat("Cat");
createList(dog, cat).stream().forEach(e -> {
System.out.println(e);
});
}
}
重要的是要知道仿制药仅在编译时存在,以这种方式,它可以恢复与Java版本的复古兼容性,另一个重要的一点是指出,此处介绍的示例是出于教学目的。 p>