Java 泛型类型和实例

Java 泛型类型和实例,java,class,generics,inheritance,instanceof,Java,Class,Generics,Inheritance,Instanceof,让我们建立几个假设类 class Animal { } class Dog extends Animal { } class Cat extends Animal { } class Rat extends Animal { } 我该怎么做这样的事情呢 List<Animal> listOfAnimals = ArrayList<Animal>(); listOfAnimals.add(new Dog); listOfAnimals.add(new Cat

让我们建立几个假设类

class Animal {

}

class Dog extends Animal {

}

class Cat extends Animal {

}

class Rat extends Animal {

}
我该怎么做这样的事情呢

List<Animal> listOfAnimals = ArrayList<Animal>();
listOfAnimals.add(new Dog);
listOfAnimals.add(new Cat);
listOfAnimals.add(new Rat);
listOfAnimals.add(new Rat);

//Return a list of animals that are the type of T
public <T> ArrayList<T> animalsOfType(T animal) {
    for (Animal A : listOfAnimals) {
        if (A instanceof T) {
            //The current animal in the list is the type of T
        }
    }
}
列表)。这是可能的吗?为了达到这样的结果,我必须如何重组我的类

List<Animal> listOfAnimals = ArrayList<Animal>();
listOfAnimals.add(new Dog);
listOfAnimals.add(new Cat);
listOfAnimals.add(new Rat);
listOfAnimals.add(new Rat);

//Return a list of animals that are the type of T
public <T> ArrayList<T> animalsOfType(T animal) {
    for (Animal A : listOfAnimals) {
        if (A instanceof T) {
            //The current animal in the list is the type of T
        }
    }
}

提前谢谢

我不确定这是你想要的

public static void main(String[] args) {

    List<Animal> listOfAnimals = new ArrayList<>();
    listOfAnimals.add(new Dog());
    listOfAnimals.add(new Cat());
    listOfAnimals.add(new Rat());
    listOfAnimals.add(new Rat());

    List<Dog> result = animalsOfType(Dog.class, listOfAnimals);

}

public static <T> ArrayList<T> animalsOfType(Class<T> animal, List<Animal> listOfAnimals) {
    ArrayList<T> list = new ArrayList<>();
    for (Animal A : listOfAnimals) {
        if (animal.isInstance(A)) {
            list.add((T) A);
        }
    }
    return list;
}
publicstaticvoidmain(字符串[]args){
List listafaimals=newarrayList();
添加(newdog());
添加(new Cat());
add(newrat());
add(newrat());
列表结果=animalsOfType(Dog.class,动物列表);
}
公共静态ArrayList animalsOfType(动物类,动物列表){
ArrayList=新建ArrayList();
用于(动物A:动物名录){
if(动物试验(A)){
列表。添加((T)A);
}
}
退货清单;
}

我不确定这是否是您想要的

public static void main(String[] args) {

    List<Animal> listOfAnimals = new ArrayList<>();
    listOfAnimals.add(new Dog());
    listOfAnimals.add(new Cat());
    listOfAnimals.add(new Rat());
    listOfAnimals.add(new Rat());

    List<Dog> result = animalsOfType(Dog.class, listOfAnimals);

}

public static <T> ArrayList<T> animalsOfType(Class<T> animal, List<Animal> listOfAnimals) {
    ArrayList<T> list = new ArrayList<>();
    for (Animal A : listOfAnimals) {
        if (animal.isInstance(A)) {
            list.add((T) A);
        }
    }
    return list;
}
publicstaticvoidmain(字符串[]args){
List listofaimals=new ArrayList();
添加(newdog());
添加(new Cat());
add(newrat());
add(newrat());
列表结果=animalsOfType(Dog.class,动物列表);
}
公共静态ArrayList animalsOfType(动物类,动物列表){
ArrayList=新建ArrayList();
用于(动物A:动物名录){
if(动物试验(A)){
列表。添加((T)A);
}
}
退货清单;
}
试试这个

public <T extends Animal> List<T> animalsOfType(Class<T> animalClazz) {
    return listOfAnimals.stream().filter(animal -> clazz.isInstance(animal)).map(animal -> (T) animal).collect(Collectors.toList());
}
public List animalsOfType(类animalClazz){
返回animals.stream().filter(animal->clazz.isInstance(animal)).map(animal->(T)animal.collector(Collectors.toList());
}
试试这个

public <T extends Animal> List<T> animalsOfType(Class<T> animalClazz) {
    return listOfAnimals.stream().filter(animal -> clazz.isInstance(animal)).map(animal -> (T) animal).collect(Collectors.toList());
}
public List animalsOfType(类animalClazz){
返回animals.stream().filter(animal->clazz.isInstance(animal)).map(animal->(T)animal.collector(Collectors.toList());
}

这是一个简单的java 8解决方案:

public static <T extends Animal> List<T> animalsOfType(Class<T> animalClass, List<Animal> listOfAnimals) {
    return listOfAnimals.stream().filter(a -> a instanceof animalClass).collect(Collectors.toList());
}
公共静态列表animalsOfType(类animalClass,列表动物){
返回animals.stream();
}
然后你会说:

List<Dog> currentListOfDogs = animalsOfType(Dog.class, listOfAnimals);
List currentListOfDogs=animalsOfType(Dog.class,listOfAnimals);

这是一个简单的java 8解决方案:

public static <T extends Animal> List<T> animalsOfType(Class<T> animalClass, List<Animal> listOfAnimals) {
    return listOfAnimals.stream().filter(a -> a instanceof animalClass).collect(Collectors.toList());
}
公共静态列表animalsOfType(类animalClass,列表动物){
返回animals.stream();
}
然后你会说:

List<Dog> currentListOfDogs = animalsOfType(Dog.class, listOfAnimals);
List currentListOfDogs=animalsOfType(Dog.class,listOfAnimals);

我想我想要。。。如果(A.isInstance(animal)),因为这会告诉我列表中的动物是否属于我要传递的类型,对吗?我想我想要。。。如果(A.isInstance(animal)),因为这会告诉我列表中的动物是否属于我要传递的类型,对吗?