【发布时间】:2016-06-28 02:07:45
【问题描述】:
我有一个类似下面的文件:
7
CAT Tabby Jane F 2 7.0 true false
DOG Sam Jeff M 7 32.1 true
CAT Elsie Kate F 9 9.8 true true
DOG Spot Dick M 6 63.4 false
BIRD Tweety Dick M 3 0.06 false
BIRD Opus Berkeley M 31 10.3 true
DOG Spot John M 3 42.6 true
我的文件的第一列代表类,以下列代表各个类的变量/字段值。我想以某种方式阅读这些行,以便我的读者认识到第一列是类,第二列是名称变量,第三列是所有者变量第四是名称(宠物)的性别等等。 以下是变量(以防万一您需要强大的想法):
protected String name;
protected String owner;
protected String sex = "F";
protected int age = 3;
protected double weight = 5.0;
protected boolean spayedNeutered;
private boolean declawed;(which is a subclass filed)
所以当我读取文件时,输入以下方式:
public void readData() throws Exception{
BufferedReader filename = new BufferedReader(new FileReader("pets.txt"));
String str;
List<String> list = new ArrayList<String>();
while((str = filename.readLine()) != null){
String[] temp = str.split("\\s+",2);
list.add(temp[1]);
}
pets = list.toArray(new String[6]);
for (String x: pets) {
System.out.println(x);
}
}
这只会打印来自文件的普通数据。我不知道如何告诉读者识别每个特定列代表类和相应的(按顺序)变量值。识别字段和类后,我将它们放在像 Pet [] pets 之类的数组中(Pet 是我的父/超类)。然后我将应用自定义的 toString 方法以某种方式打印对象数组,如下所示:
> java AnimalHospital pets.data
Tabby owned by Jane: Small Cat, F, Age 2, 7.0 lbs. (not declawed)
Sam owned by Jeff: Medium Dog, M, Age 7, 32.1 lbs.
Elsie owned by Kate: Medium Cat, F, Age 9, 9.8 lbs.
Spot owned by Dick: Large Dog, M, Age 6, 63.4 lbs. (not spayed/neutered)
Tweety owned by Dick: Small Bird, M, Age 3, 0.06 lbs. (not clipped)
Opus owned by Berkeley: Large Bird, M, Age 31, 10.3 lbs.
Spot owned by John: Medium Dog, M, Age 3, 42.6 lbs.
我希望我的问题有足够的信息来澄清我的核心问题。
【问题讨论】:
-
您需要使用类似
Class.forName()的构造。这种技术称为反射。 -
@Evangey 它说反射是一个强大的工具,建议只由了解基本功能的高级用户使用。你能推荐任何其他像我这样的初学者可以使用的技术吗?我真的很想学习,而不是仅仅使用一个高级的 API 类就可以了。
-
重新反射——的确,反射是强大的,虽然使用强大的工具并没有错,如果不尝试就无法学习它们......
标签: java arrays oop bufferedreader filereader