java - 是否有更快/更简单的方法从扫描的输入构造对象
问题描述
想象一下,您想创建一个未知数量的类实例。您决定使用 ArrayList(如果有更好的选择,如果有人能解释这一点,我将非常感激)您希望允许通过系统输入创建类的实例。
import java.util.ArrayList;
import java.util.Scanner;
class MyClass {
static ArrayList<MyClass> myArrayList = new ArrayList<>();
int field1;
int field2;
int field3;
public MyClass(int field1, int field2, int field3) {
// contructor statements
}
这是问题所在,如果您扫描输入,则无法将它们输入构造函数,因为您需要在其间打印消息然后扫描输入。您必须通过将所有字段的值分配给其他变量来存储它们,如下所示,您也可以在每次扫描它们时将字段设置在新对象的索引处,但这似乎会很慢而且很复杂代码。
static void createNewInstance() {
Scanner myScanner = new Scanner(System.in);
System.out.println("Enter field 1");
int f1 = myScanner.nextInt();
System.out.println("Enter field 2");
int f2 = myScanner.nextInt();
System.out.println("Enter field 3");
int f3 = myScanner.nextInt();
myArrayList.add(new MyClass(f1, f2, f3));
}
}
所以我想知道是否有办法将扫描的输入直接传递给构造函数,似乎将值存储为变量需要一些计算,而且,如果这些变量是原始的,我认为它们会在堆栈中,哪个堆栈具有静态内存分配,因此它们永久存在。在我看来,这不是一个很好的解决方案,但我对程序性能的了解也非常有限,所以我不确定。我猜答案就是使用该解决方案,其他任何解决方案都太复杂了,不值得使用。感谢您的阅读,对不起,我一直在努力用简洁的方式来表达这个问题。
解决方案
在“正常”情况下,您永远不会创建这样的对象 - 应用程序接收对象的方式有很多种(从批处理中读取,接收 HTTP 请求,反序列化......)而且我从未见过“在生产中”提示用户“现在给出我是第一个字段的值... ”等和扫描值
似乎将值存储为变量需要一些计算
这根本不是问题 - 在 Java 中创建对象非常快,另外三个基本字段在性能方面根本不相关
不要过度设计这个
推荐阅读
- python - 当我使用 BeautifulSoup 从该网站上抓取价格时,为什么当我按下检查时输出与 html 代码不匹配?
- kubernetes - 如何保持 redis 数据库 pod 在 kubernetes 中运行
- performance-testing - 如何使用 Gatling 在封闭模型中实现恒定的并发活跃用户?
- python - 如何将空 numpy 数组返回为 np.ndarray([[[]]])
- powershell - 如何在页面上导出webpart的xml
- python - 了解 Python asyncio 中事件循环的实现
- c++ - C++ 中的 VLA,扩展名为 std=c++11
- angular - Ionic Web 应用程序页面未使用 Ingress Controller 打开
- html - 我在 WordPress 中的自定义帖子类型未通过短代码显示内容
- c# - 使用 C# 将文件上传到 AWS S3,而不使用 AWS 开发工具包