Android:如何在不使用switch语句的情况下从不同类调用同名函数? 我对java +/Android编码(旧C++编码器)比较新。我正在开发一个应用程序,用户可以使用类似的界面处理不同的情况。答案/功能/内部加工/编号将根据具体情况而有所不同
例如: 我有一个VitalsDisplay活动,应该是通用的vitals显示代码。它希望使用函数SetVitals(Vitals)在显示Vitals之前修改字符串数组Vitals SetVitals必须是“智能的”——基于我正在处理的情况(int CaseNumber,MainActivity中定义的公共int),它将以不同的方式修改vitals数组。现在,定义SetVitals的简单方法是:Android:如何在不使用switch语句的情况下从不同类调用同名函数? 我对java +/Android编码(旧C++编码器)比较新。我正在开发一个应用程序,用户可以使用类似的界面处理不同的情况。答案/功能/内部加工/编号将根据具体情况而有所不同,java,android,function,class,methods,Java,Android,Function,Class,Methods,例如: 我有一个VitalsDisplay活动,应该是通用的vitals显示代码。它希望使用函数SetVitals(Vitals)在显示Vitals之前修改字符串数组Vitals SetVitals必须是“智能的”——基于我正在处理的情况(int CaseNumber,MainActivity中定义的公共int),它将以不同的方式修改vitals数组。现在,定义SetVitals的简单方法是: public static string[] SetVitals(String[] givenVita
public static string[] SetVitals(String[] givenVitals){
switch (MainActivity.CaseNumber){
case 1:
//Change vitals in one way
break;
case 2:
//Change Vitals in another way
break;
}
}
我不想这样做,因为我担心将来的伸缩性——例如,如果我想添加额外的案例,我必须搜索和浏览这些代码以进行更改。此外,每个病例需要做的不仅仅是设定生命体征(您需要安排测试等,这些测试必须根据病例返回不同的结果)。因此,在未来扩大这一范围意味着我必须搜寻和检查生命体征、结果、测试功能等
相反,我希望定义多个活动:
例如,胸痛1、胸痛2和胸痛3。每个都有一个SetVitals实例(字符串数组Vitals)。它们还具有OrderResults、CaseUpdates等实例,可由主活动调用
这种方法有两个问题:
很抱歉,如果出现错误,我目前没有安装Java…以下是我所做的,希望它符合您的需要,我只使用了2个案例,但对于更多案例也是一样的:
public class MainActivity extends Activity {
CaseWorker worker;
Button button1;
Button button2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.button1);
button2 = (Button)findViewById(R.id.button2);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
worker = new CaseOne();
}
});
button2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
worker = new CaseTwo();
}
});
}
public void anotherMethod(String[] givenVitals){
worker.SetVitals(givenVitals);
}
}
这是CaseWorker界面,您可以添加其他与案例相关的行为:
public interface CaseWorker {
public String[] SetVitals(String[] givenVitals);
}
下面是对应于这两种情况的两种实现:
public class CaseOne implements CaseWorker {
@Override
public String[] SetVitals(String[] givenVitals) {
// do the work the first way
return null;
}
}
public class CaseTwo implements CaseWorker {
@Override
public String[] SetVitals(String[] givenVitals) {
// do the work the second way
return null;
}
}
您可以添加其他按钮,对于您添加的每个按钮,您必须提供另一个案例工作者实现:案例三、案例四。。。
不需要切换,因为您已经通过将侦听器设置为您拥有的不同按钮来进行切换(切换已经在UI中).是否必须有两个类:ChestPain1和ChestPin2,为什么不能有同一个类的两个实例?我在StackOverflow中搜索时看到了一些相关信息,但我不确定如何设置它(我尝试的所有操作都失败了)。你能给我举一些例子吗?我想你是一名C#开发人员,但请坚持Java的命名惯例,以小写字母开始变量名。;-)你能告诉我如何更改案例号吗?你在哪里更改?或者用户在哪里更改?我想我可以帮助你避免这种情况switch@coding.mof-哇,是的-没有意识到约定发生了变化!抱怨抱怨。你能给我举个例子说明如何做到这一点吗?我仍在努力理解其中一些东西是如何工作的。如果请求是超基本的,很抱歉。@KarthikM请参阅更新。(注意,这不是完整的代码,但你可以理解)中士,这太棒了!你和叶给出了相同的答案,所以我猜这是我应该学习的一个重要的编码课程:)谢谢!这和@Sarge Borsch的答案是一样的,但有了代码,希望你能明白这太棒了,非常感谢@YAT!我正在修改我的代码以包含这些东西,我相信它会起作用。为你跟进问题(很抱歉成为另一个负担):有没有办法让“工人”public/global?这样它就可以被不同的类调用?基本上,我是在问我是否可以在MainActivity中定义一次worker,然后在另一个类中调用它,而不必使用switch类来重新定义worker。你能确切地告诉我你想从哪里调用worker吗?它是来自另一个活动?还是同一个活动中使用的类ty?告诉我你想做什么,这样我才能给你最好的答案MainActivity类将调用VitalDisplay类。这最终将调用PatientRoom类。这两个类都需要来自Case2或Case1的信息。按钮按下是在MainActivity中完成的,因此worker对象在那里创建…但不可访问(我想)通过PatientRoom或VitalDisplay类。我可以使用类似于PatientRoom和VitalDisplay类中的按钮按下语句的switch语句来重新创建“worker”,但我想知道是否有“public”方法来创建worker。我可以使用“public static Ca”吗
public interface CaseWorker {
public String[] SetVitals(String[] givenVitals);
}
public class CaseOne implements CaseWorker {
@Override
public String[] SetVitals(String[] givenVitals) {
// do the work the first way
return null;
}
}
public class CaseTwo implements CaseWorker {
@Override
public String[] SetVitals(String[] givenVitals) {
// do the work the second way
return null;
}
}