Есть ли способ использовать методы переданного объекта класса?

#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
}