澄清:
我不知道对象名称。这就是问题所在。我正在创建一个像这样的对象:
`new Object(String attributes);
我正在尝试在另一个类中运行代码,例如:
***.getStuff();
诀窍是,对象没有名称。但我知道什么是String属性
问题:如果不使用可怕的for循环,有没有办法实现这一目标?
这个问题有点棘手,但我会尽我所能。我想要的是获得一个匹配特定字段的对象,而不会使循环混乱。有点像:
对象A具有字符串名称。
String nameObj = "Tickle";
对象A的名称为“Tickle”
if(nameObj.equals(Object A)){
//bla bla
}
非常混乱的措辞,是的。对于那个很抱歉。我想在我的代码中使用对象A而不必弄清楚它是哪个对象,假设我拥有的只是它的名字。我想,我正在寻找使用for循环的捷径。
随时提出有关我正在寻找的问题的问题。抱歉这个措辞严厉的问题。
编码不好,但这就是我要找的......
nameObj.getName().getObjectA();
答案 0 :(得分:4)
如果您有一堆带有名称的对象,并且您想要按其名称获取对象,我建议您查找班级HashMap
。 HashMap
允许您在键下放置对象,当您为哈希映射提供键时,它将返回与该键关联的对象。因此,在您的示例中,键将是字符串名称。
答案 1 :(得分:0)
采用这个实现,它演示了@Patashu所说的,创建了一个对象的映射,在这种情况下,我只是在所有的顶部添加一个抽象类。
import java.util.HashMap;
public class FindMeBaby {
public static void main(String[] args) {
Factory.add(new NiceGuy("first one"));
Factory.add(new FirstChild("ok im late"));
System.out.println(Factory.get("first one")
.getVeryImportantInformationThatOnlyThisClassKnows());
}
}
abstract class ParentOfAll {
protected String id;
public ParentOfAll(String id) {
this.id = id;
}
public String getId(){
return id;
}
public abstract String getVeryImportantInformationThatOnlyThisClassKnows();
}
class FirstChild extends ParentOfAll {
public FirstChild(String id) {
super(id);
}
public String getVeryImportantInformationThatOnlyThisClassKnows() {
return "this is a secret";
}
}
class NiceGuy extends ParentOfAll {
public NiceGuy(String id) {
super(id);
}
public String getVeryImportantInformationThatOnlyThisClassKnows() {
return "to say the true, i'm not that nice :)";
}
}
class Factory {
private static HashMap allTheObjects = new HashMap();
public static Object add(ParentOfAll object) {
allTheObjects.put(object.getId(), object);
return object;
}
public static ParentOfAll get(String key) {
return (ParentOfAll) allTheObjects.get(key);
}
}
答案 2 :(得分:0)
这是另一个版本,具有更透明的aproach的相同实现,没有Factory类,Parent本身将跟踪实例并保存在列表中。
import java.util.HashMap;
public class FindMeBaby {
public static void main(String[] args) {
NiceGuy foo = new NiceGuy("first one");
FirstChild bar = new FirstChild("ok im late");
System.out.println(ParentOfAll.get("first one")
.getVeryImportantInformationThatOnlyThisClassKnows());
}
}
abstract class ParentOfAll {
protected String id;
public ParentOfAll(String id) {
this.id = id;
add(this);
}
public String getId() {
return id;
}
public abstract String getVeryImportantInformationThatOnlyThisClassKnows();
private static HashMap allTheObjects = new HashMap();
private static Object add(ParentOfAll object) {
allTheObjects.put(object.getId(), object);
return object;
}
public static ParentOfAll get(String key) {
return (ParentOfAll) allTheObjects.get(key);
}
}
class FirstChild extends ParentOfAll {
public FirstChild(String id) {
super(id);
}
public String getVeryImportantInformationThatOnlyThisClassKnows() {
return "this is a secret";
}
}
class NiceGuy extends ParentOfAll {
public NiceGuy(String id) {
super(id);
}
public String getVeryImportantInformationThatOnlyThisClassKnows() {
return "to say the true, i'm not that nice :)";
}
}