У меня есть следующие классы: package util;Как передать константы методу?
public final class Constant {
private Constant() {
throw new AssertionError();
}
public static class Product {
public static final String CODE = "Product";
public static final String A = "product_5g2g";
public static final String B = "product_a45h";
public static final String C = "product_a3ag";
//more constants..
}
public static class Employee {
public static final String CODE = "Employee";
public static final String A = "employee_1g3f";
public static final String B = "employee_h52d";
public static final String C = "employee_h5d2";
//more constants..
}
public static class Client {
public static final String CODE = "Client";
public static final String A = "client_h5ad";
public static final String B = "client_1df1";
public static final String C = "client_6g23";
//more constants..
}
}
и:
package util;
import util.Constant.*;
public class Main {
public void run() {
if (isSelected(Product.CODE)) {
if (isSelected(Product.A) || isSelected(Product.B)) {
//do something
}
compute(Product.C);
//more similar instruction that use constants from Product class
}
if (isSelected(Employee.CODE)) {
if (isSelected(Employee.A) || isSelected(Employee.B)) {
//do something
}
compute(Employee.C);
//more similar instruction that use constants from Employee class
}
if (isSelected(Client.CODE)) {
if (isSelected(Client.A) || isSelected(Client.B)) {
//do something
}
compute(Client.C);
//more similar instruction that use constants from Client class
}
}
public boolean isSelected(String s) {
return true;
}
public void compute(String s) {
}
}
Как вы можете видеть, этот блок кода
if (isSelected(StaticClass.CODE)) {
if (isSelected(StaticClass.A) || isSelected(StaticClass.B)) {
//do something
}
compute(StaticClass.C);
//more similar instruction that use constants from Product class
}
повторяется, но не может поставить его в отдельный метод, потому что Java не разрешить статический класс как параметр public void method(StaticClass) {}
.
Как я могу реорганизовать вышеуказанный код? Моя первая мысль заключалась в том, чтобы заставить Singletons расширить базовый класс или реализовать общий интерфейс. Есть лучшее решение?
Вы проверили Enums? – mc20
Я бы пересчитал Enums и подумал о методах переключения и извлечения. – Nico
@Jorji У вас есть два ответа на ваш вопрос. Пожалуйста, оставьте комментарий к ответам, если вам нужно дополнительное разъяснение или принять один из ответов как правильный, щелкнув галочку. Голосование бесплатное. Принятие ответа дает вам два момента. Тебе нечего терять. Сообщите мне, есть ли у вас проблемы, которые мешают вам комментировать или принимать ответы. – CKing