为了账号安全,请及时绑定邮箱和手机立即绑定

之间的区别?扩展vs E扩展

之间的区别?扩展vs E扩展

守着一只汪 2022-06-23 20:07:41
我目前正在阅读通配符,但我不知道两者之间是否有任何区别?扩展动物和 E 扩展动物。
查看完整描述

2 回答

?
慕姐8265434

TA贡献1813条经验 获得超2个赞

? extends Animal用于当您试图说任何扩展 Animal 的类都可以作为输入时。例如,List<? extends Animal>。如果您想在编写代码时跟踪类中的对象类型,您将使用 E。您可能只需要通过对象的单一类型。


public class Node<T, E extends Animal> {

    public T findByObj(E obj) {

        // return index in Integer

    }

}

在这种情况下,您将像这样实例化并使用它:


Node<Integer, Person> node = new Node<Integer, Person>();

node.findByObj(new Person());

您可能期望从 Person 类中得到一些东西,但可以使用随机类。它保持类型安全并且行为是可预测的。


查看完整回答
反对 回复 2022-06-23
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

哇,想到这个,我的脑袋几乎要爆炸了……据我所知,这两者都做同样的事情。也许他们在有些不同的情况下这样做?例如类定义、方法声明或方法的返回类型。请参阅我编写的一些代码来说明这一点。希望有更多知识的人会输入回复,但我想尝试回答这个问题。


所以基本上...


? 是一个通配符,表示 Animal 类的任何子类型或 Animal 类本身。


请阅读泛型通配符:https ://en.wikipedia.org/wiki/Generics_in_Java


以下是有关有界类型的更多信息,<E extends Animal>您给出的示例显然是:https ://docs.oracle.com/javase/tutorial/java/generics/bounded.html


这表示任何 IS-A Animal 对象或 Animal 对象本身对于此类或方法参数都是可接受的。


尝试输入一些代码并在 Animal 层次结构内部和外部尝试不同的对象以查看差异。例如,创建一个扩展 Animal 的 LolCat 类。查看我的程序如下:


import java.util.ArrayList;

import java.util.List;


class Animal {


 public String toString() { 

    return "I am an animal!";

 }


}


class LolCat extends Animal {


  public String toString() { 

    return "I am a lolcat!";

  }



}


class Machine{}


class Computer extends Machine {}


public class TestThis{


    public <U extends Animal> void anyAnimal(U u) {

        System.out.println("This is an animal ");

        System.out.println(u);

        System.out.println("The object type of U is: " + u.getClass().getName());


    }


    public void listAnimalFriends(List<? extends Animal> a) {


        System.out.println("This is in the animal list: ");

        for (Animal anima: a) {

            System.out.println(anima);

        }



    }




    public static void main(String[] args) {


        TestThis t = new TestThis();

        t.anyAnimal(new LolCat());


        System.out.println("\n");


        ArrayList<Animal> a_list = new ArrayList<>();

        a_list.add(new LolCat());


        t.listAnimalFriends(a_list);



    }


}


查看完整回答
反对 回复 2022-06-23
  • 2 回答
  • 0 关注
  • 76 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信