【问题标题】:Dynamically change which variable to call动态更改要调用的变量
【发布时间】:2014-02-15 04:36:28
【问题描述】:

好的,所以我有一个包含很多列和行的表,我需要从 SQLite 数据库填充其中的每个 TextView。这就是我目前的做法(在你看之前深吸一口气,这是你见过的最糟糕的代码之一):

populateUrnik("Ponedeljek", 1, razred, pon1, pon1u);
    populateUrnik("Torek", 1, razred, tor1, tor1u);
    populateUrnik("Sreda", 1, razred, sre1, sre1u);
    populateUrnik("Četrtek", 1, razred, cet1, cet1u);
    populateUrnik("Petek", 1, razred, pet1, pet1u);

    populateUrnik("Ponedeljek", 2, razred, pon2, pon2u);
    populateUrnik("Torek", 2, razred, tor2, tor2u);
    populateUrnik("Sreda", 2, razred, sre2, sre2u);
    populateUrnik("Četrtek", 2, razred, cet2, cet2u);
    populateUrnik("Petek", 2, razred, pet2, pet2u);

    populateUrnik("Ponedeljek", 3, razred, pon3, pon3u);
    populateUrnik("Torek", 3, razred, tor3, tor3u);
    populateUrnik("Sreda", 3, razred, sre3, sre3u);
    populateUrnik("Četrtek", 3, razred, cet3, cet3u);
    populateUrnik("Petek", 3, razred, pet3, pet3u);

    populateUrnik("Ponedeljek", 4, razred, pon4, pon4u);
    populateUrnik("Torek", 4, razred, tor4, tor4u);
    populateUrnik("Sreda", 4, razred, sre4, sre4u);
    populateUrnik("Četrtek", 4, razred, cet4, cet4u);
    populateUrnik("Petek", 4, razred, pet4, pet4u);

    populateUrnik("Ponedeljek", 5, razred, pon5, pon5u);
    populateUrnik("Torek", 5, razred, tor5, tor5u);
    populateUrnik("Sreda", 5, razred, sre5, sre5u);
    populateUrnik("Četrtek", 5, razred, cet5, cet5u);
    populateUrnik("Petek", 5, razred, pet5, pet5u);

    populateUrnik("Ponedeljek", 6, razred, pon6, pon6u);
    populateUrnik("Torek", 6, razred, tor6, tor6u);
    populateUrnik("Sreda", 6, razred, sre6, sre6u);
    populateUrnik("Četrtek", 6, razred, cet6, cet6u);
    populateUrnik("Petek", 6, razred, pet6, pet6u);

    populateUrnik("Ponedeljek", 7, razred, pon7, pon7u);
    populateUrnik("Torek", 7, razred, tor7, tor7u);
    populateUrnik("Sreda", 7, razred, sre7, sre7u);
    populateUrnik("Četrtek", 7, razred, cet7, cet7u);
    populateUrnik("Petek", 7, razred, pet7, pet7u);

    populateUrnik("Ponedeljek", 8, razred, pon8, pon8u);
    populateUrnik("Torek", 8, razred, tor8, tor8u);
    populateUrnik("Sreda", 8, razred, sre8, sre8u);
    populateUrnik("Četrtek", 8, razred, cet8, cet8u);
    populateUrnik("Petek", 8, razred, pet8, pet8u);

    populateUrnik("Ponedeljek", 9, razred, pon9, pon9u);
    populateUrnik("Torek", 9, razred, tor9, tor9u);
    populateUrnik("Sreda", 9, razred, sre9, sre9u);
    populateUrnik("Četrtek", 9, razred, cet9, cet9u);
    populateUrnik("Petek", 9, razred, pet9, pet9u);

    populateUrnik("Ponedeljek", 10, razred, pon10, pon10u);
    populateUrnik("Torek", 10, razred, tor10, tor10u);
    populateUrnik("Sreda", 10, razred, sre10, sre10u);
    populateUrnik("Četrtek", 10, razred, cet10, cet10u);
    populateUrnik("Petek", 10, razred, pet10, pet10u);

    populateUrnik("Ponedeljek", 11, razred, pon11, pon11u);
    populateUrnik("Torek", 11, razred, tor11, tor11u);
    populateUrnik("Sreda", 11, razred, sre11, sre11u);
    populateUrnik("Četrtek", 11, razred, cet11, cet11u);
    populateUrnik("Petek", 11, razred, pet11, pet11u);

如您所见,在调用这些函数时我只更改了 3 件事:1-11 的数字和两个 textview 变量 pon1、pon1u 等(textviews)

有没有办法创建一个 for 循环来改变动态调用哪个变量?可能是这样的:

for (int i = 1; i <= 11; i++){
    populateUrnik("Ponedeljek", i, razred, pon(i), pon(i)u);
}

我知道上面的语法是不可能的,但我只是想证明我想要实现的目标。

非常欢迎任何其他关于如何改进这个冗长而糟糕的代码的建议!

【问题讨论】:

标签: java android variables dynamic


【解决方案1】:

我会考虑将您的代码重新设计为类似于以下内容:

static class Razred {}

static class DayDef {}
static class Pon extends DayDef {}
static class Tor extends DayDef {}
static class Sre extends DayDef {}
static class Cet extends DayDef {}
static class Pet extends DayDef {}

static class DayDefU {}
static class PonU extends DayDefU {}
static class TorU extends DayDefU {}
static class SreU extends DayDefU {}
static class CetU extends DayDefU {}
static class PetU extends DayDefU {}

static class Urnik {

    private String string;
    private int i;
    private Razred razred;
    private DayDef dayDef;
    private DayDefU dayDefU;

    public Urnik(String string, int i, Razred razred, DayDef dayDef,
            DayDefU dayDefU) {
                this.string = string;
                this.i = i;
                this.razred = razred;
                this.dayDef = dayDef;
                this.dayDefU = dayDefU;
    }

    // getters and setters for every field

}

public static void main(String[] args) {

    Razred razred = new Razred();

    List<Urnik> urniks = new ArrayList<Urnik> ();

    for (int i = 0; i < 11; i++){
        urniks.add(new Urnik("Ponedeljek", i+1, razred, new Pon(), new PonU()));
        urniks.add(new Urnik("Torek", i+1, razred, new Tor(), new TorU()));
        urniks.add(new Urnik("Sreda", i+1, razred, new Sre(), new SreU()));
        urniks.add(new Urnik("Četrtek", i+1, razred, new Cet(), new CetU()));
        urniks.add(new Urnik("Petek", i+1, razred, new Pet(), new PetU()));
    }

}

但是,如果无法做到,我会建议像 @dinesh707 建议的那样进行反思。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多