Java中有什么仿制药?
#初学者 #编程 #java #devrel

您好,今天我将在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版本的复古兼容性,另一个重要的一点是指出,此处介绍的示例是出于教学目的。