#java #android #object #methods #pass-by-reference
#java #Android #объект #методы #передача по ссылке
Вопрос:
Я пытаюсь повторно использовать раздел кода, который воздействует на объект класса, у меня есть несколько классов, которые по большей части имеют 90% одинаковых имен методов, прямо сейчас у меня есть куча операторов if else, где первая строка уникальна, а остальные одинаковы, есть ли способ, которым я могу передать объект и использовать его методы?
я пытался просто взять повторяющийся код и поместить в метод в моей деятельности, но имена методов никогда не распознаются, независимо от того, как я повторно инициализирую объект, например, я бы создал метод с именем lookupclass (Object lookupObject) и вставил туда неспецифический код, и непосредственно перед этим кодом я попробовал много разных попыток создать объект из переданного объекта, большинство распознает новый объект в коде, но все методы (например, lookup.loadClass(fileToLookup))
отображаются как не распознанные
if (databaseFolder.equals(CustomerFolder)) {
CustomerClass lookup = new CustomerClass();
//region nonspecific code on object
lookup.loadClass(fileToLookup);
String[] tempString = new String[lookup.positionIds.length * 2];
String[] tempExpandString = new String[lookup.positionIds.length];
String[] classData = lookup.getClassData();
String[] positionNames = lookup.positionNames;
for (int i = 0; i < lookup.positionIds.length; i ) {
tempString[i * 2] = positionNames[i];
if (lookup.positionExpandableToMultipleBoolean[i] amp;amp; classData[i] != null amp;amp; classData[i].contains(",")) {
tempString[i * 2 1] = "Multiple- Click to Expand";
tempExpandString[i] = classData[i];
} else if (lookup.positionExpandableToMultipleBoolean[i]) {
tempString[i * 2 1] = lookup.expandablePositionIdToName(i, classData[i]);
tempExpandString[i] = classData[i];
} else if(classData[i] == null){
tempString[i * 2 1] = " ";
} else
tempString[i * 2 1] = classData[i];
}
list = tempString;
filesToExpand = tempExpandString;
//endregion
} else if (databaseFolder.equals(AddressFolder)) {
AddressClass lookup = new AddressClass();
//region nonspecific code on object
lookup.loadClass(fileToLookup);
String[] tempString = new String[lookup.positionIds.length * 2];
String[] tempExpandString = new String[lookup.positionIds.length];
String[] classData = lookup.getClassData();
String[] positionNames = lookup.positionNames;
for (int i = 0; i < lookup.positionIds.length; i ) {
tempString[i * 2] = positionNames[i];
if (lookup.positionExpandableToMultipleBoolean[i] amp;amp; classData[i] != null amp;amp; classData[i].contains(",")) {
tempString[i * 2 1] = "Multiple- Click to Expand";
tempExpandString[i] = classData[i];
} else if (lookup.positionExpandableToMultipleBoolean[i]) {
tempString[i * 2 1] = lookup.expandablePositionIdToName(i, classData[i]);
tempExpandString[i] = classData[i];
} else if(classData[i] == null){
tempString[i * 2 1] = " ";
} else
tempString[i * 2 1] = classData[i];
}
list = tempString;
filesToExpand = tempExpandString;
//endregion
}
Ответ №1:
Хорошим способом сделать это было бы через интерфейс. Вы могли бы определить интерфейс под названием Lookup, в котором определены общие сигнатуры методов. Затем попросите ваш CustomerClass, AddressClass и т.д. Реализовать этот интерфейс. Это позволило бы вам сделать что-то вроде:
Lookup lookup = null;
if (databaseFolder.equals(CustomerFolder)) {
lookup = new CustomerClass();
} else {
lookup = new AddressClass();
}
lookup.loadClass(fileToLookup);
//Rest of common code
Ответ №2:
Эндрю Ариас, Спасибо, у меня все получилось, я заставил все мои похожие классы реализовать интерфейс со всеми необходимыми мне методами, просто вместо того, чтобы хранить общий код под ним, я смог отправить его методу с кодом ниже, потребовалось несколько проб и ошибок, чтобы понять, что после настройки интерфейса я мог преобразовать объект в новый объект внутри метода, что очень помогло, поскольку я постоянно менял несколько блоков кода, устраняя ошибки, которые могли возникнуть в определенных ситуациях
//основной код
if (databaseFolder.equals(CustomerFolder)) {
CustomerClass lookup = new CustomerClass();
try {
lookupClass(lookup);
} catch (ClassNotFoundException e) {Log.d(AppName,e.toString()); }catch (IllegalAccessException e) {Log.d(AppName,e.toString()); } catch (java.lang.InstantiationException e) { Log.d(AppName,e.toString()); }
//метод
public void lookupClass(Object test) throws ClassNotFoundException, IllegalAccessException, java.lang.InstantiationException {
ClassInterface lookup = (ClassInterface) test;
//region nonspecific code on object
lookup.loadClass(fileToLookup);
String[] tempString = new String[lookup.positionIds.length * 2];
String[] tempExpandString = new String[lookup.positionIds.length];
String[] classData = lookup.getClassData();
String[] positionNames = lookup.positionNames;
for (int i = 0; i < lookup.positionIds.length; i ) {
tempString[i * 2] = positionNames[i];
if (lookup.positionExpandableToMultipleBoolean[i] amp;amp; classData[i] != null amp;amp; classData[i].contains(",")) {
tempString[i * 2 1] = "Multiple- Click to Expand";
tempExpandString[i] = classData[i];
} else if (lookup.positionExpandableToMultipleBoolean[i]) {
tempString[i * 2 1] = lookup.expandablePositionIdToName(i, classData[i]);
tempExpandString[i] = classData[i];
} else if(classData[i] == null){
tempString[i * 2 1] = " ";
} else
tempString[i * 2 1] = classData[i];
}
list = tempString;
filesToExpand = tempExpandString;
//endregion
}