有没有办法使用传递的 class 对象的方法?
Is there a way to use the methods of a passed class object?
我正在尝试重用作用于 class 对象的代码部分,我有多个 class 大部分有 90% 相同的方法名称,现在我有一堆 if else 语句,其中第一行是唯一的,其余的是相同的,有没有一种方法可以传递对象并使用它的方法?
我试过将重复的代码放入我的 activity 中的一个方法中,但是无论我如何重新初始化对象,方法名称都无法识别
例如,我会创建一个名为 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
}
执行此操作的一个好方法是通过界面。您可以定义一个名为 Lookup 的接口,其中定义了通用方法签名。然后让您的 CustomerClass、AddressClass 等实现该接口。这将允许您执行以下操作:
Lookup lookup = null;
if (databaseFolder.equals(CustomerFolder)) {
lookup = new CustomerClass();
} else {
lookup = new AddressClass();
}
lookup.loadClass(fileToLookup);
//Rest of common code
安德鲁·阿里亚斯,
谢谢,这对我来说效果很好,我让所有类似的 类 实现了一个包含我需要的所有方法的接口,而不是将公共代码保留在它下面,我能够将它发送到一个方法下面的代码,经过一些试验和错误,我意识到一旦我设置了接口,我就可以将该对象转换为方法中的一个新对象,这对我有很大帮助,因为我在解决可能会出现的错误时不断更改几个代码块出现在某些情况下
//主要代码
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
}
我正在尝试重用作用于 class 对象的代码部分,我有多个 class 大部分有 90% 相同的方法名称,现在我有一堆 if else 语句,其中第一行是唯一的,其余的是相同的,有没有一种方法可以传递对象并使用它的方法?
我试过将重复的代码放入我的 activity 中的一个方法中,但是无论我如何重新初始化对象,方法名称都无法识别
例如,我会创建一个名为 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
}
执行此操作的一个好方法是通过界面。您可以定义一个名为 Lookup 的接口,其中定义了通用方法签名。然后让您的 CustomerClass、AddressClass 等实现该接口。这将允许您执行以下操作:
Lookup lookup = null;
if (databaseFolder.equals(CustomerFolder)) {
lookup = new CustomerClass();
} else {
lookup = new AddressClass();
}
lookup.loadClass(fileToLookup);
//Rest of common code
安德鲁·阿里亚斯, 谢谢,这对我来说效果很好,我让所有类似的 类 实现了一个包含我需要的所有方法的接口,而不是将公共代码保留在它下面,我能够将它发送到一个方法下面的代码,经过一些试验和错误,我意识到一旦我设置了接口,我就可以将该对象转换为方法中的一个新对象,这对我有很大帮助,因为我在解决可能会出现的错误时不断更改几个代码块出现在某些情况下
//主要代码
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
}