jash hashmap со значением класса - PullRequest
0 голосов
/ 26 октября 2011

Мне нужно сохранить TDSContent в хэш-карте, указав ключ String. Мне нужно сделать что-то вроде этого.

public class Target {
    public Target() {
        final int a = 0x64c896;
        final int b = 0xc050be;
        final int c = 0xffc896;

        TDS = new HashMap<String, TDSContent>();

        TDSContent contentMA = new TDSContent(a, b, c, 10);
        TDSContent contentMB = new TDSContent(a, c, b, 10);
        TDSContent contentMC = new TDSContent(b, a, c, 10);
        TDSContent contentMD = new TDSContent(c, b, a, 10);
        TDSContent contentME = new TDSContent(c, a, b, 10);
        TDSContent contentMF = new TDSContent(b, c, a, 10);
        ... // and so on...

        TDS.put("Marker A", contentMA);
        TDS.put("Marker B", contentMB);
        TDS.put("Marker C", contentMC);
        TDS.put("Marker D", contentMD);
        TDS.put("Marker E", contentME);
        TDS.put("Marker F", contentMF);
            ... // and so on...
    }

    public int getCL(String key) {
        TDSContent tdc = TDS.get(key);

        if(tdc.equals(contentMA)) {
            return contentMA.getValue();
        } else if(tdc.equals(contentMB)) {
            return contentMB.getValue();
        } else if(tdc.equals(contentMC)) {
            return contentMC.getValue();
        } else if(tdc.equals(contentMD)) {
            return contentMD.getValue();
        } else if(tdc.equals(contentME)) {
            return contentME.getValue();
        } else if(tdc.equals(contentMF)) {
            return contentMF.getValue();
        } ...// and so on...

             else {
            return contentMD.getValue();
        }
    }
}

Проблема в том, что для создания объекта класса TDSContent.

потребуется очень много тяжелой работы.

Могу ли я сделать что-то подобное ...:

public class Target {
    public Target() {
        final int a = 0x64c896;
        final int b = 0xc050be;
        final int c = 0xffc896;

        TDS = new HashMap<String, TDSContent>();

           // form: new TDSContent(CL, CM, CR, D);
        TDS.put("Marker A", new TDSContent(a, b, c, 10));
        TDS.put("Marker B", new TDSContent(a, c, b, 10));
                ... // and so on..
    }

    public int getCL(String key) {
           // this method gets the first parameter of the TDSContent
           // constructor (see comment above).
        return TDS.get(key).getValue();
    }

    public int getCM(String key) {
    ... // similar to getCL but returns the second parameter of the TDSContent
        // constructor (see comment above)

... на getCL() и получить и экземпляр [?] Значения TDSContent?

В частности, если у меня есть вызов на что-то вроде:

Target target = new Target();
int x1 = target.getCL("Marker A"); // I should get 0x64c896 here
int x2 = target.getCM("Marker A"); // I should get 0xc050be here

Это возможно?

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Конечно, просто сопоставьте метод getXXX(), который вы вызываете для объекта TDSContent на карте, с аксессором.Это предполагает, что у вас есть методы доступа на TDSContent для каждого аргумента конструктора.

public int getCL(String key) {
    return TDS.get(key).getCL();
}

public int getCM(String key) {
    return TDS.get(key).getCM();
}

public int getCR(String key) {
    return TDS.get(key).getCR();
}

public int getD(String key) {
    return TDS.get(key).getD();
}
1 голос
/ 26 октября 2011

Это TDSContent независимо от того, назначаете ли вы переменную в качестве промежуточного шага.

Я не совсем понимаю цель, стоящую за первой реализацией getCL, похоже, что полностью побеждает цель иметь карту в первую очередь. (Я не вижу, где TDS объявлен, только назначен.)

Я мог бы пойти немного дальше и создать несколько удобных служебных методов, чтобы сделать вещи еще короче, если их "много".

putTds("Marker B", tds(a, c, b, 10));

Идея создания вспомогательных методов getCL и getCM хороша и может значительно повысить читаемость программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...