首页 > 解决方案 > 为什么选择数组列表get() 在 Java 中返回 Object 而不是 String

问题描述

在制作参数解析器时,我使用了ArrayList<String>.
参考这个官方文档ArrayList<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 做到这一点(通用类型)

帮我...

标签: javaarraylistgeneric-type-argument

解决方案


在第一段代码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_) {

推荐阅读