采用以下代码:
public static void print(ArrayList<String> list) {
for (String word : list) {
System.out.println( word );
}
}
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("Python");
list.add("Ruby");
list.add("C++");
print(list);
}
为什么我们需要在main中将“列表”定义为ArrayList,然后在方法的参数中再次定义它?为什么不能将变量类型从main传递给方法?有什么办法吗?您希望在其中的类型在main和method之间进行更改的任何示例吗?
感觉就像不必要地重复执行同一步骤两次。
例如,为什么我们不能只使用:
public static void print(list) {
for (String word : list) {
System.out.println( word );
}
}
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("Python");
list.add("Ruby");
list.add("C++");
print(list);
}
答案 0 :(得分:3)
什么是list
?
public static void print(list) {
for (String word : list) {
System.out.println( word );
}
}
在面向对象编程的上下文中,假设一个外部类想要使用此方法。它会在这里传递什么?它可以传入什么 ?怎么知道?
从根本上讲,您已经迷上了变量和参数之间的差异。由于Java是一种强类型语言,因此必须键入两个 ,但是两者都不必相互关联。您可以使用一个与稍后声明的变量相同的名称来命名,以提高可读性,但是没有为此而设置任何强制性要求。
为清楚起见,再次使用相同的方法:
public static void print(ArrayList<String> l) {
for (String word : l) {
System.out.println( word );
}
}
您的参数的名称无关紧要,只要键入 。
答案 1 :(得分:0)
您需要在参数列表中指定类型,以便可以验证传入的类型。
在此示例中,您可能会说“好吧,我只调用它一次并传递一个列表,因此很明显类型应该是什么”。当从多个地方调用它,传递不同的对象时会发生什么?类型检查器需要知道函数期望的类型,以便在提供错误类型的对象时,它可以引发编译时错误,并验证在传递的对象上使用的方法对该对象合法。
答案 2 :(得分:0)
Java是一种强类型和静态类型的语言,它要求您声明该方法接受的类型。如果您不希望该方法接受任何类型的列表,则可以执行以下操作:
// this method can accept an ArrayList, LinkedList, etc
public static void print(List<String> list) {
for (String word : list) {
System.out.println( word );
}
}
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("Java");
list.add("Python");
list.add("Ruby");
list.add("C++");
print(list);
}
答案 3 :(得分:0)
Java是一种强类型编程语言。访问https://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html了解更多信息。 您可以使用Java之类的语言(例如Java中的JavaScript)仅传递没有类型的名称,而应键入type(特定字词:布尔值,int,double,...),然后输入nameOfParameter。