有没有办法使用传递的类对象的方法?

问题描述 投票:0回答:2

我试图重用作用于类对象的代码段,我有多个类,大部分都有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

        }
java android object methods pass-by-reference
2个回答
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

1
投票

安德鲁阿里亚斯,谢谢你,对我来说效果很好,我让我所有类似的类都实现了我需要的所有方法的接口,而不是保留下面的公共代码我能够将它发送到带有代码的方法下面,进行了一些试验和错误,意识到一旦我进行了界面设置,我可以将对象转换为方法中的新对象,这有助于我不断更改几个代码块,因为我找出了可能出现的错误从某些情况来看

//主要代码

        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
}
© www.soinside.com 2019 - 2024. All rights reserved.