gpt4 book ai didi

java - 如何优化只有类发生变化的重复代码?

转载 作者:行者123 更新时间:2023-11-30 01:39:03 26 4
gpt4 key购买 nike

我有一个基本的 Java 问题困扰了我很长一段时间。考虑以下示例:

ArrayAdapter<CarDetailsAdapter.OwnerType> ownerTypeArrayAdapter = new ArrayAdapter<CarDetailsAdapter.OwnerType>(
CarDetailsActivity.this, android.R.layout.simple_spinner_dropdown_item, CarDetailsAdapter.OwnerType.values());
ownerSpinner.setAdapter(ownerTypeArrayAdapter);
ownerSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
owner_result = Integer.toString(((CarDetailsAdapter.OwnerType) ownerSpinner.getSelectedItem()).value);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});

ArrayAdapter<CarDetailsAdapter.DriverType> driver_type = new ArrayAdapter<CarDetailsAdapter.DriverType> (
CarDetailsActivity.this, android.R.layout.simple_spinner_dropdown_item, CarDetailsAdapter.DriverType.values());
driverSpinner.setAdapter(driver_type);
driverSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
driver_result = Integer.toString(((CarDetailsAdapter.DriverType) driverSpinner.getSelectedItem()).value);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});

上面的代码可以解释如下:

1 - 创建类型为 OwnerType/DriverType 的 ArrayAdapter(迭代器),这是两个不同的枚举2 - 将适配器连接到旋转器
3 - 当在微调器中选择一个值时(基于 onItemSelected 监听器)根据变量更新结果

虽然代码是特定于 Android 的,但我认为基础知识也可以扩展到 Java。

除了输入类(枚举),即 CarDetailsAdapter.OwnerType 和 CarDetailsAdapter.DriverType 之外,这两个代码 fragment 几乎完全相同。

有什么方法可以将此功能转换为函数,这样我就不必重复相同的代码行了吗?我已经尝试了数小时的反射(reflection),希望它能解决问题,但我想我遗漏了一些东西。

谢谢

最佳答案

像这样的东西可以工作:

interface Callback<T> {
void complete(T result);
}

public <T> void spinner(int spinnerId, Class<? extends Enum> enumClass, final Callback<T> callback) {

final Spinner spinner = (Spinner) getActivity().findViewById(spinnerId);
ArrayAdapter<Enum> arrayAdapter = new ArrayAdapter<Enum>(
getActivity(), android.R.layout.simple_spinner_dropdown_item, enumClass.getEnumConstants());
spinner.setAdapter(arrayAdapter);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
T result = (T) spinner.getSelectedItem();
callback.complete(result);
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}
});
}

// ....

spinner(R.id.ownerSpinner, CarDetailsAdapter.OwnerType.class, new Callback<CarDetailsAdapter.OwnerType>() {
@Override
public void complete(CarDetailsAdapter.OwnerType result) {
owner_result = result;
}
});

您可能还想归还微调器或以其他方式进行调整。

关于java - 如何优化只有类发生变化的重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34748946/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com