Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
public class Context {
public int countSuccess;
public int countFailed;
// ....
public void markSuccess() {
countSuccess++;
countFailed--;
}
public void markSuccessAll() {
countSuccess += countFailed;
countFailed = 0;
}
// ....
}
Вот такая вот супер-абстракция. Пример клиентского кода:
public void processRequest(Context ctx) {
// ...
ctx.countFailed = elems.size();
for (String elem : elems) {
boolean success = doSomething(elem);
if (success) {
ctx.markSuccess();
}
}
}
1. Два счётчика. Очевидное простое решение для этой модели - totalCount и successCount. successCount растёт up to totalCount. Я вот не сразу догнал, почему у нас сразу все элементы failed.
2. Public-поля. Без комментариев.
public final class Context {
private final int totalCount;
private int successCount;
public Context(final int totalCount) {
this.totalCount = totalCount;
}
public void markSuccess() {
if (successCount < totalCount) {
successCount++;
} else {
throw new AssertionError("Attempt to have more successes than total items");
}
}
public void markSuccessAll() {
successCount = totalCount;
}
public int getTotalCount() {
return totalCount;
}
public int getSuccessCount() {
return successCount;
}
public int getFailedCount() {
return totalCount - successCount;
}
}
Практически. К сожалению, на этапе конструкции Context totalCount не известен. В принципе, будь задача чуть серьёзнее, функционал подсчёта можно было бы выделить во вложенный класс, инстанс которого создавался бы контекстом. А так вполне сойдёт сеттер для totalCount.
г$DK,N)T.J"S)F:X$W:J:K,M(Z:T.F"N)P"F"O,R,L W E$N!L:M)O?K:L?S(ZFS)T(J!D$N$I"V?C!O:Q.U M)M DI$L"M(P)ZA?E Y"R,E?J)HK"K?M"N B"A:B:K"I,R J(P.P"EM?Q!G.F)R:R?L,H.B:M:S Z(C:J:W!D(V?N L S L,L!V"P,O D:WS:S?A,N.B.TH$WT!Q(C"R!Q!V:W"X"C$Y.UE,A(V"H Y?R?U.P(N.W.D(I,O"H.T)Z?QU"F,F"K)Y(S.U"O)S)J:ID"W,C!H,D(J$Q$C(R,A.R)T!Y"X(L.F$X!L,FПBUEEHGTGRDELRZDPUBVAFROGODIAPQTWAFUHTHWSMYGXQGCONLQWTQZQPKAAAQCNEGHLHAHDZIVYZNCXAUMFOQUMWZMWTPWMRIYTKHURUKYXJJGCBWDJRNIDJARCFSSVTTIQBWRWKWLYHCNXRDHHMIVXVESMUGDDNESRGOWSCSXEQHXUJWTHYFMEHVAZTFSMFEVAULKAFFAPQRHRZPBOTGZUYBLVKWTHJBQFSRTAFABRQTZWLBKSUHTNWLFOILGAXCXWXDKQMHSYJSLXIJURWTGPNEUQMOJMKQ
2. Public-поля. Без комментариев.
Фиксед?