java 为什么主函数中的字符串参数应该是数组为什么不支持数组列表?[closed]

lndjwyie  于 2022-10-30  发布在  Java
关注(0)|答案(1)|浏览(76)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新问题,以便editing this post可以用事实与引用来回答.

昨天关门了。
Improve this question

class Main{
    public static void main(String[] args){

    }
}

在上面的代码中,编译器每次执行时都会搜索以String[] args为参数的main函数。
为什么数组列表或其他列表不能用于获取相同String类型的运行时参数?
使用任何其他列表比使用数组有什么缺点吗?

z9ju0rcb

z9ju0rcb1#

Java非常接近Objective-C(除了它从C++中继承的方法调用语法)。值得注意的是ObjectiveC中的main使用了从C中继承的原始main原型,而不是一个完全形成的容器:

int main(int argc, const char * argv[])

原始的char指针在Java中不存在,所以我们至少从那里得救了!
入口点依赖于加载或可用的最少语言基础结构/包,这是有道理的,但我个人认为它是早期添加的,从未审查过,因为它不是一个严格的依赖关系。
当然,为自己创造一个更好的切入点是很容易的:

import java.util.Arrays;
import java.util.ArrayList;

class NiceStart
{
    public static void niceMain(ArrayList<String> args) throws java.lang.Exception {
        //A nicer start...
    }

    public static void main (String[] args) throws java.lang.Exception
    {
        ArrayList<String> niceArgs=new ArrayList<String>(Arrays.asList(args));
        niceMain(niceArgs);
    }
}

就我个人而言,我认为两者都应该被允许作为入口点,并且运行时环境要么传递一个普通的旧数组,要么传递ArrayList,如main()的签名所指示的那样。
Java已经允许几种样式,所以没有理由不支持void main(ArrayList args) throws java.lang.Exception
当大多数建议都是“不要陷入简单的旧数组”时,这不是真的必要,但也不是太多。

相关问题