我有一个用字符串,双打和布尔值填充的对象数组列表。
ArrayList<Object> nlist = new ArrayList<>();
nlist.add(n.getUserName());//USerName is a string
nlist.add(n.getWallet());// Wallet is a Double
nlist.add(n.getAmountOfStorage());// Double
nlist.add(n.isLoyal());// bool
nlist.add(n.isPayAhead());// bool
nlist.add(n.isRegular());//bool
此arraylist已序列化为.obj文件。我想阅读arraylist并将其设置为变量列表。我试过这样的事但没有运气。
try {
ObjectInputStream filein = new ObjectInputStream(new BufferedInputStream(new FileInputStream(mainFile)));
Object inObj = filein.readObject();
if (inObj instanceof ArrayList) {
int i = 0;
ArrayList<Object> rlist = (ArrayList)inObj; //Arraylist of objects to set Variables to.
//tried this.
n.setUserName(rlist.get(i));
i++;
n.setWallet(rlist.get(i));
//continuing for a few more variables.
获取设置为不同类型变量的对象列表的最佳方法是什么?
答案 0 :(得分:0)
我认为你不能做到这一点。你要做的唯一方法是将每个值设置为适当的类型。没有办法(我知道)如果它不知道它所包含的类型,你可以为数组列表类型分配一个变量。希望这会有所帮助:)
答案 1 :(得分:0)
您应该创建一个包含所需的所有变量作为字段的类,而不是ArrayList。
然后将其写入流中。
也许像
public class Customer implements Serializable {
String userName;
Double wallet;
Double amountOfStorage;
boolean isLoyal;
boolean isPayAhead;
boolean isRegular;
}
如果您发现自己正在考虑创建一个容器(List),其中包含与继承无关的各种不同类型(除了Object),那么您可能会走错路。
答案 2 :(得分:0)
从未听说过POJO(Plain Old Java Object)?
您可以使用此普通旧Java对象将不同类型的Object
存储在一个Object
中,然后它将是您ArrayList
的类型。就像这样:
public class NameOfObjectYouWant {
String userName;
Double wallet;
Double amountOfStorage;
Boolean isLoyal;
Boolean isPayAhead;
Boolean isRegular;
// Getters and Setters Method....
}
您将在此类名为POJO
的对象中设置您想要的值,然后将其添加到ArrayList
。
ArrayList<NameOfObjectYouWant> arrayList = new ArrayList<>();
NameOfObjectYouWant n = new NameOfObjectYouWant();
n.setUserName("userName"); // Sample Inputs...
n.setWallet(232.42);
n.setAmountStorage(3000.00);
n.isLoyal(true);
n.isPayHead(true);
n.isRegular(true);
arrayList.add(n); // Add your n in your ArrayList..
答案 3 :(得分:0)
ArrayList&lt; Object&gt;数组基本上可以容纳任何对象,String,Integers,Longs,JButton等等。现在我不太确定这是否是您正在寻找的但是我要给它一个射击。如果您想知道特定ArrayList中包含的对象&lt; Object&gt;然后你可以使用一个简单的方法,如下所示:
public static String varType(final Object objectVar) {
try {
return objectVar.getClass().getSimpleName().toUpperCase();
}
catch (Exception e) { return null; }
}
如何使用此方法:
JButton myButton = new JButton();
JTextField myTextField = new JTextField();
JFrame myFrame = new JFrame();
ArrayList<Object> a = new ArrayList<>();
a.add("My String");
a.add(23234);
a.add(376754356L);
a.add(345.74678D);
a.add(3.54f);
a.add(true);
a.add('A');
a.add(myButton);
a.add(myTextField);
a.add(myFrame);
for (int i = 0; i < a.size(); i++) {
System.out.println("Element at index " + i + " contains a " +
varType(a.get(i)) + " Object.");
}
当然,要将Object ArrayList(默认情况下为Object)的元素放入各自的变量中,您需要将它们强制转换为它,例如:
JButton myButton = new JButton();
JTextField myTextField = new JTextField();
JFrame myFrame = new JFrame();
ArrayList<Object> a = new ArrayList<>();
a.add("My String");
a.add(23234);
a.add(376754356L);
a.add(345.74678D);
a.add(3.54f);
a.add(true);
a.add('A');
a.add(myButton);
a.add(myTextField);
a.add(myFrame);
//Ten elements within the Object ArrayList (0-9)
String myString = a.get(0).toString();
int myInt = (int) a.get(1);
long myLong = (long) a.get(2);
double myDouble = (double) a.get(3);
float myFloat = (float) a.get(4);
boolean myBoolean = (boolean) a.get(5);
char myChar = (char) a.get(6);
JButton myNewButton = (JButton) a.get(7);
JTextField myNewTextField = (JTextField) a.get(8);
JFrame myNewFrame = (JFrame) a.get(9);
System.out.println(varType(myString));
System.out.println(varType(myInt));
System.out.println(varType(myLong));
System.out.println(varType(myDouble));
System.out.println(varType(myFloat));
System.out.println(varType(myBoolean));
System.out.println(varType(myChar));
System.out.println(varType(myNewButton));
System.out.println(varType(myNewTextField));
System.out.println(varType(myNewFrame));