为什么 ArrayList<String> get() returns 对象不是 Java 中的字符串

Why ArrayList<String> get() returns Object not String in Java

在制作参数解析器时,我使用了ArrayList<String>
Refering to this official DocumentationArrayList<E>.get() 应该返回 E 类型的对象,因此 ArrayList<String>.get() 应该返回 String 对象。

但是,在这种情况下,我得到的是 Object 而不是 String 元素。

import lombok.Data;

import java.util.ArrayList;

@Data
public class Argument<T> {
    public ArrayList<String> Args;
    public String Description;
    public Boolean Required;
    public Boolean HasValue;
    public T Value;
}
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;

public class ArgumentParser {
    private ArrayList<Argument> argumentList_;

    public String ArgList() {
        StringBuilder builder = new StringBuilder(); 
        for (Argument argument : argumentList_) {

            //Here is the problem
            for (String arg : argument.Args) {
                builder.append(arg);
                builder.append(", ");
            }
        }
        //Delete Traling Comma
        builder.delete(builder.length());
        builder.delete(builder.length());

        return builder.toString();
    }
}

是这种情况吗

  1. IDE 环境(IntelliJ + Lombok)中的错误
  2. 我的代码让 Java 这样做(通用类型)

帮帮我...

在第一段代码中Argument定义了一个类型参数。

public class Argument<T> {
    public ArrayList<String> Args;

在第二段代码中使用了 Argument 但缺少类型参数。

    private ArrayList<Argument> argumentList_;
    // ...
        for (Argument argument : argumentList_) {

ArrayList<Argument> 是一种 罕见的 类型(不太常见(?),被称为 部分原始类型 - 一种具有原始类型参数)。其行为很奇怪。

最简单的解决方法是使用通配符。

    private ArrayList<Argument<?>> argumentList_;
    // ...
        for (Argument<?> argument : argumentList_) {