Android:如何在不使用switch语句的情况下从不同类调用同名函数? 我对java +/Android编码(旧C++编码器)比较新。我正在开发一个应用程序,用户可以使用类似的界面处理不同的情况。答案/功能/内部加工/编号将根据具体情况而有所不同

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

例如: 我有一个VitalsDisplay活动,应该是通用的vitals显示代码。它希望使用函数SetVitals(Vitals)在显示Vitals之前修改字符串数组Vitals

SetVitals必须是“智能的”——基于我正在处理的情况(int CaseNumber,MainActivity中定义的公共int),它将以不同的方式修改vitals数组。现在,定义SetVitals的简单方法是:

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等实例,可由主活动调用

这种方法有两个问题:

  • 现在,switch语句移动到VitalsDisplay活动/函数。这本身并不坏——在某个时候需要有一个switch语句,根据用户正在执行的情况来决定需要调用哪个函数 我想知道是否有一种方法不必在每次我需要从唯一活动中的函数获取特定于案例的信息(基于案例编号)时都重新创建switch语句?我尝试基于switch语句创建意图,然后使用意图调用函数。。。而且失败了(可能是我的错,因为我还不擅长意图使用)

  • 我也试着这样做:

    公共布尔值VitalDisplay(){ 如果(案例编号==1){

    //更新文本字段并显示重要信息 }

  • 我得到一个错误:“复制局部变量ClassInfo调用”

    关于如何更好地实现这一点,有什么想法吗?

    摘要:如何从一个活动调用多个类中具有类似名称的函数?从哪个类调用函数的决定将基于MainActivity中设置的int变量

    (除非有人有更干净的方法来做这件事——我也完全赞成!)

    从不同的类中调用具有相同名称的函数

    您可以让这些类实现一个接口,该接口带有您想要调用的方法。然后,当您拥有其中一个类的实例时,您可以调用它

    更新1
    很抱歉,如果出现错误,我目前没有安装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;
        }
    
    }