如何把公共类放在switch case里面

时间:2017-05-19 10:42:00

标签: java android

在公共类中我们希望基于包名称的switchcase在每种情况下我们都调用一个公共URL ..我试过这种方式它不工作切换案例

public class AllChanges {

    Context context;
Switch(getPackageName()) {
        case "com.agilerise.package1":
            public static String gurl = "http://google.com/index.php";

            break;

        case "com.agilerise.package2":
public static String gurl = "http://bing.com/index.php";
  case "com.agilerise.package2":
public static String gurl = "http://stackoverlfow.com/index.php";

            break;
    }


}

4 个答案:

答案 0 :(得分:0)

 public class AllChanges {
 public static String gurl ="";
 public void seturl()
 {
  Switch(getPackageName()) {
        case "com.agilerise.package1":
        gurl = "http://google.com/index.php";
        break;
    case "com.agilerise.package2":
        gurl = "http://bing.com/index.php";
        break;
    case "com.agilerise.package2":
        gurl = "http://stackoverlfow.com/index.php";
        break;
 }
 }

}

像这样打电话

 AllChanges  allchanges=new AllChanges();
 allchanges.seturl();

答案 1 :(得分:0)

我建议你阅读scope

https://docs.oracle.com/javase/specs/jls/se8/html/jls-6.html#jls-6.3

您需要在类范围中声明变量。你的开关盒必须在一个功能内。你的例子有一个重复的案例,你应该解决这个问题。 com.agilerise.package1com.agilerise.package2com.agilerise.package3

public class AllChanges {

    public static String gurl = "";

    Context context;
    private void myFunction(){
        switch(getPackageName()) {
            case "com.agilerise.package1":
                gurl = "http://google.com/index.php";
                break;
            case "com.agilerise.package2":
                gurl = "http://bing.com/index.php";
                break;
            case "com.agilerise.package3":
                gurl = "http://stackoverlfow.com/index.php";
                break;
        }
    }
}

这是一个更优雅的解决方案。您应该尝试避免使用静态变量。然后,您可以通过String url = getUrl(myFunction());

调用此函数
private String getUrl(String s){
    switch(s) {
        case "com.agilerise.package1":
            return "http://google.com/index.php";
        case "com.agilerise.package2":
            return "http://bing.com/index.php";
        case "com.agilerise.package3":
            return "http://stackoverlfow.com/index.php";
        default: 
            return "SomeDefaultUrl";
    }
}

答案 2 :(得分:0)

更好的方法是在这里使用多态

您应该定义一个接口,而不是检查类包(可能会有所不同并导致子类的重复条目):

interface GoogleSearchEngineSelector extends SearchEngineSelector{
  URL THE_URL = new URL("http://google.com/index.php");
  default public URL getSearchEngineUrl(){
     return THE_URL; 
}

然后你有专门的子接口和默认方法:

class SomeClass implements GoogleSearchEngineSelector {
   // ...
}

然后,您的类可以实现一个专用子接口:

{{1}}

并且您的代码更改为: Nothing
因为子类无关...

答案 3 :(得分:0)

Java无法正常工作。您只能在Java中的functions内编写语句。变量的声明可以在class之外的functions中出现。