当前位置: 首页 > 知识库问答 >
问题:

扩展vs E扩展之间的区别[重复]

蓬思博
2023-03-14

我目前正在阅读有关通配符的文章,但我不知道它们之间是否有任何区别?扩展了Animal,E扩展了Animal。

共有2个答案

冯宏恺
2023-03-14

哇,想到这个我的头都快爆炸了。。。据我所知,它们都做同样的事情。也许他们是在不同的环境下这么做的?例如,类定义、方法声明或方法的返回类型。请看我写的一些代码来说明这一点。希望有更了解情况的人会打一个回复,但我想试着回答这个问题。

所以基本上。。。

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

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

下面是有关

这表示IS-A动物或动物对象本身的任何对象都可以接受这个类或方法参数。

试着键入一些代码,并尝试在动物层次结构内部和外部使用不同的对象来观察差异。例如,创建一个扩展动物的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);


    }

}

郑翰海
2023-03-14

?extends Animal用于表示任何扩展Animal的类都可以作为输入。例如,List

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类提供一些信息,但也可以使用随机类。它保证了类型的安全性,并且行为是可预测的。

 类似资料:
  • 在Android中,扩展Lifecycler活动、Activity、ActionBarActivity和AppCompactActivity之间的主要区别是什么?这些类在用法方面有何不同?

  • 问题内容: 我无法理解为什么我们在PHP中需要2个XML解析器。 有人可以解释两者之间的区别吗? 问题答案: 简而言之: SimpleXml 用于简单的XML和/或简单的UseCases 与节点一起使用的有限API(例如,不能对接口进行太多编程) 所有节点属于同一种类(元素节点与属性节点相同) 节点可以魔术访问,例如 DOM 适用于您可能拥有的任何XML UseCase 是W3C DOM API的

  • 本文向大家介绍iOS类别和类扩展的区别。相关面试题,主要包含被问及iOS类别和类扩展的区别。时的应答技巧和注意事项,需要的朋友参考一下 答案:category和extensions的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。 extensions可以认为是一个私有的Category。

  • 那么,和到底有什么区别呢?什么时候我们应该偏爱一个而不是另一个?

  • Chrome将其平台上的程序分为扩展与应用,并且使用了同样的文件结构,那么两者的区别是什么呢?在早期的Chrome版本中两者的区别非常模糊,而且有些扩展也可以用应用实现,反之亦然。但今天看来,Google正在努力使两者的界限变得清晰。 总的来说,扩展与浏览器结合得更紧密些,更加强调扩展浏览器功能。而应用无法像扩展一样轻易获取用户在浏览器中浏览的内容并进行更改,实际上应用有更加严格的权限限制。所以应

  • 问题内容: 创建一个Today小部件,我用来保留一些数据。在主应用程序中,我正在使用。这不能由扩展读取(或可以?),这就是为什么我使用构造函数。 用户在主应用程序中持久存储的数据需要在扩展程序中可用。 目前,我坚持两者,以便可以共享这些值 问题是我应该将它们放在一起并仅在我的应用程序中使用,还是这种不好的做法? 编辑:我正在使用一个应用程序组容器。为了澄清起见,我问我是否应该在整个项目中用suit