简体   繁体   中英

Get Object from Field

CLARIFICATION:

I do not know the objects name. That is where the problem comes in. I am creating an object like such:

`new Object(String attributes);

I am trying to run code in another class such as:

***.getStuff();

the trick to it is, there is no name for the Object. but i do know what String attributes is

The question: Is there any way to accomplish this without using the dreaded for loop?


This question is a bit tricky to word, but I will try my best. What I want to is get an object that matches a particular field without making a messy for loop. Something along the lines of:

Object A has the field String name.

String nameObj = "Tickle";

Object A has the name "Tickle"

if(nameObj.equals(Object A)){
//bla bla
}

Very confusing wording, yes. Sorry about that. I want to use Object A in my code without having to figure out which object it is, assuming all I have is its name. I am looking for a shortcut around using a for loop, I suppose.

Feel free to ask questions about what I am looking for. Sorry about the terribly worded question.

Poor coding, but this is what I am looking for...

nameObj.getName().getObjectA();

If you have a bunch of objects with names, and you want to grab an object by its name, I suggest you look up the class HashMap . HashMap lets you put in objects under keys, and when you give the hash map a key it returns the object associated with that key. So in your example, the keys would be string names.

Take at this implementation, that demonstrates what @Patashu said, create a map to the objects, in this case I just add an abstract class at the top of all.

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);
    }
}

This is another version, of the same implementation with a more transparent aproach, without the Factory class, the Parent itself will keep track of the instances and save in a list.

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 :)";
    }

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM