为什么这个Java代码没有编译?

Kor*_*gay -1 java

这是我的代码:

public class MessagePrettier<T> {

    private final T uglyMessage;

    public MessagePrettier(T uglyMessage) {
        this.uglyMessage = uglyMessage;
    }

    public List<String> stringList() {
        List<String> strings = new ArrayList<String>();
        strings.add("Pretty version of: " + uglyMessage.toString());
        return strings;
    }

    public static void main(String[] args) {
        MessagePrettier<Integer> p = new MessagePrettier<Integer>(new Integer("25"));
        List list = p.stringList();
        for (String s : list) {
            System.out.println(s);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

当我编译这段代码时,我会得到:

java: incompatible types
  required: java.lang.String
  found:    java.lang.Object
Run Code Online (Sandbox Code Playgroud)

那么stringList()返回一个字符串列表,为什么编译器期望对象?

Era*_*ran 10

您正在将您分配List<String>给原始List变量:

List list = p.stringList();
Run Code Online (Sandbox Code Playgroud)

因此,迭代它返回Objects.

将其更改为:

List<String> list = p.stringList();
Run Code Online (Sandbox Code Playgroud)