方法返回值类型不匹配

public List<Object> initData() {

    List<String> stringList = new ArrayList<>();

    return stringList;

}

public Object tt() {

    String s = "1";

    return s;

}

为啥上边这种就报错类型不匹配,下边这么写就不报错?

慕尼黑8549860
浏览 1224回答 3
3回答

芜湖不芜

String是一个Object,但是List<String>却不是一个List<Object>。即String是Object的子类,但是List<String>却不是List<Object>的子类。List<String>和List<Object>都是List,没有继承关系,但是其限定的容器中可装的内容的类型不一致。故两者类型不匹配

慕的地8271018

public Object [] initData() {&nbsp;&nbsp;&nbsp;&nbsp; String [] dd = new String [10];&nbsp;&nbsp;&nbsp;&nbsp; return dd;&nbsp;}换成数组就不报错,

小怪兽爱吃肉

方法 1&nbsp;&nbsp;List<Object> initData() {...}&nbsp;就Java 语言而言,所有的类都隐式继承 Object,即 Object 类位于继承树最顶层,是所有其它类的基(父)类。&nbsp;泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。方法 1 规定调用此方法将返回一个List ,其元素类型是 Object 。换句话说,返回的 List 之中的元素类型,可以是 Object,或 Object 的子类,即 可以是Java任何一个类的对象(实体)。可是,此方法的代码,创建了一个 元素类型仅限于String(字符串)类型的List。一种是元素类型可以是任意一种JAVA类的实体的 List (不限类型),一种是 元素类型仅限于String(字符串)类型的 List。两种List的类型当然不一样,故报错。方法 2&nbsp;Object tt(){...}任何Java 子类的对象,都(可当作)是父类的对象。比如,Student extends Person, 那麽,任何一个具体的学生,当然都是人(Person)。方法 2 规定调用后返回 Object 类。实际返回了一个字符串对象。字符串对象,当然就是一个 Object 类的对象。因此,方法 2 没错
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java