2017-05-19 43 views
-5

內部,我們想基於我們呼籲一個公共URL任何情況下包名switchcase公共類..我試過這種方式,它是不工作的情況下切換如何把公共類的內部開關的情況下

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; 
    } 


} 

回答

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(); 
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"; 
    } 
} 
+0

公共靜態內的開關盒不工作 – siva

+0

上述兩個示例都應該可以工作。我會親自使用第二種解決方案,它更簡單,更優雅。你應該儘量避免使用靜態。 – kkflf

0

更好的方法調用這個函數是使用多態性這裏:

而是檢查類的包(可能會發生變化,從而導致子類重複的條目),你應該定義一個接口:

interface SearchEngineSelector{ 
    URL getSearchEngineUrl(); 
} 

那麼你有專門的子接口的默認方法:

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 { 
    // ... 
} 

和你的代碼的代碼更改爲:沒有
因爲沒有一個子類做...

0

Java不能這樣工作。您只能在functions內寫入陳述聲明的變量可以在functions以外的class之內。