java - 创建不带变量的新对象数组

标签 java oop

我是一名主要学习 Java 的学生。

我对面向对象编程了解得越多,我就越发现自己创建新对象的数组:

ArrayList<kitten> sackOfKittens = new ArrayList<kitten>();
String[] kittenNames = new String[10]; 
//fill kittenNames with cute strings like "flufftown" and "Indie Rocker"

for(int i = 0; i < 10; i++) {
    sackOfKittens.get(i) = new Kitten(kittenNames[i]);
}

这对我来说很有趣,因为现在我有所有这些小猫,我显然要对它们做一些事情,但没有直接引用它们,或者没有我命名的变量。

我是否只需要习惯这样的想法:flufftown 甚至 kitten1 已经消失,但 sackOfKittens.get(1) 是等效的?

把它写下来可以让其更有意义。

我猜一个人只是在 Kitten 类中编写方法来完成所有困惑的工作,仅此而已。

我错过了什么吗?

最佳答案

您需要放弃必须为您创建的每个对象分配一个符号的想法。符号(变量名称)是在编译时定义的,但您可以编写在运行时创建任意数量对象的程序,而无需提前知道如何调用它们。

考虑public static void main(String[] args)。您将如何处理为 args 中的每个 String 提供变量名称?您可以尝试变得聪明并提前布置一堆变量:

public static void main(String[] args) {
    String s1 = (args.length > 0) ? args[0] : null;
    String s2 = (args.length > 1) ? args[1] : null;
    String s3 = (args.length > 2) ? args[2] : null;
    String s4 = (args.length > 3) ? args[3] : null;
    String s5 = (args.length > 4) ? args[4] : null;
}

但是如果您遇到更多情况该怎么办?如果您需要支持数千个可能的命令行参数怎么办?当然,您不可能提前预测到这一点。

事实上,这就是为什么 main 采用 String[] 而不是多个 String 的确切原因。命令行参数的数量无法提前知道,因此需要一个数组。引用它们的唯一方法是通过它们在数组中的索引。

<小时/>

在没有符号的情况下,您可以使用多种方法来查找数据结构中的元素(例如数组、ListMap )。

列表和数组等数据结构可以迭代。假设您想找到名为 "puss"kitten,您可以遍历 List 中的每只 kitten 直到您找到了您想要的:

kitten pussTheKitten;
for (kitten k: sackOfKittens) {
    if (k.getName().equals("puss")) {
        pussTheKitten = k; // found it!
    }
}

或者,您可以利用强大的 Map 数据结构,根据某些独特的“键”属性更快、更轻松地获取对象:

Map<String, kitten> mapOfKittens = new HashMap<String, kitten>();
for (kitten k: sackOfKittens) {
    mapOfKittens.put(k.getName(), k);
}
kitten pussTheKitten = mapOfKittens.get("puss"); // found it!

关于java - 创建不带变量的新对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22697356/

相关文章:

java - 如何使用 Java 代码运行 Java 包内的批处理文件?

java - Java 方法中 Return 语句的工作原理

java - 在运行时通过变量设置 T 模板类型

php - fatal error : Uncaught Error: Call to a member function query() on null

oop - Kent Beck 的《测试驱动开发示例》中的示例

javascript - 在 javascript 原型(prototype)事件处理程序中保留 'this' 引用

java - 如何在 spring 4.* 中通过注解创建多个字段的约束 validator

java - 为什么托管 bean 方法在发布请求中的过滤器调用之前调用

design-patterns - 我应该如何重构这个设计

java - OOD - 避免每个成员变量使用重复函数 (Java)