Есть ли способ использовать методы переданного объекта класса? - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь повторно использовать часть кода, которая действует на объект класса, у меня есть несколько классов, которые по большей части имеют 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] && classData[i] != null && 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] && classData[i] != null && 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

        }

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Andrew Arias, спасибо, это хорошо сработало для меня, я заставил все мои похожие классы реализовать интерфейс со всеми необходимыми мне методами, просто вместо того, чтобы держать общий код под ним, я смог отправить его в методс кодом, приведенным ниже, потребовалось несколько проб и ошибок, чтобы понять, что после настройки интерфейса я могу привести объект к новому объекту в методе, что очень помогает, поскольку я постоянно меняю несколько блоков кода по мере исправления ошибокэто может возникнуть в определенных ситуациях

// основной код

        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] && classData[i] != null && 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 голос
/ 30 марта 2019

Хороший способ сделать это - через интерфейс. Вы можете определить интерфейс с именем Lookup, в котором определены сигнатуры общих методов. Затем ваш CustomerClass, AddressClass и т. Д. Реализуют этот интерфейс. Это позволит вам сделать что-то вроде:

Lookup lookup = null;
if (databaseFolder.equals(CustomerFolder)) {
    lookup = new CustomerClass();
} else {
    lookup = new AddressClass();
}
lookup.loadClass(fileToLookup);
//Rest of common code
...