Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将参数用作接口项_Java - Fatal编程技术网

Java 将参数用作接口项

Java 将参数用作接口项,java,Java,在我正在制作的程序中,我试图为给定的季节获取格式化的季节名称(格式化后即可)。我将格式化后的名称保存在一个界面中,因为如果我使用地图,它将不必要地重新生成,因为我没有创建TeamBuilder的实例 季节界面: public interface Seasons { /* * Contains a formatted list of seasons. * * An interface is being used as an alternative to us

在我正在制作的程序中,我试图为给定的季节获取格式化的季节名称(格式化后即可)。我将格式化后的名称保存在一个界面中,因为如果我使用地图,它将不必要地重新生成,因为我没有创建TeamBuilder的实例

季节界面:

public interface Seasons {
    /*
     * Contains a formatted list of seasons.
     * 
     * An interface is being used as an alternative to using a Map in the 
     * TeamBuilder class,  since calling parseTeam would have to build 
     * mappings for the seasons each time it
     * was called. This way, the formatted name can simply be grabbed
     */
    final String Skyrise = "Skyrise";
    final String Toss_Up = "Toss%20Up";
    final String Sack_Attack = "Sack%20Attack";
    final String GateWay = "Gateway";
    final String Round_Up = "Round%20Up";
    final String Clean_Sweep = "Clean%20Sweep";
    final String Elevation = "Elevation";
    final String Bridge_Battle = "Bridge%20Battle";
    final String Nothing_But_Net = "Nothing%20But%20Net";
    final String Starstruck = "Starstruck";
    final String In_The_Zone = "In%20The%20Zone";
    final String Turning_Point = "Turning%20Point";
}
当我试图抓住这些季节时,问题就来了。我的TeamBuilder类接受了一个参数(字符串季节),这是未格式化的。我的问题是,有没有办法让方法使用字符串参数从接口获取特定项?这比使用HashMap更可取,因为HashMap不需要重新生成相同的信息


所有这些类都可以在该项目的页面上找到。

如果您想以键入的方式执行此操作,可以使用Enum进行此操作:

enum Season{
    Skyrise,Toss_Up, Sack_Attack;

    @Override
    public String toString() {
        switch(this){
            case Skyrise: return "Skyrise";
            case Toss_Up: return "Toss%20Up";
            case Sack_Attack: return "Sack_Attack";
            default: return "";
        }
    }
}
public class main{
    public static void printSeason(Seasons seasons){
        System.out.println(seasons);
    }
    public static void main(String[] args) {
        Seasons e = Seasons.Skyrise;
        printSeason(e);
        System.out.println(e);
    }
}
由于编译器在内部调用toString(),因此可以像我的示例一样将参数作为字符串或字符串传递


如果您仍然希望在不“不必要地重新生成”的情况下使用映射,则可以使用带有静态初始值设定项的静态字段,如下所示:

class Seasons {
    private static Map<String,String> map = new HashMap<>();
    static {
        map.put("Skyrise", "Skyrise");
        map.put("Toss_Up", "Toss%20Up");
    }
    public static String getFormatted(String key){
        return map.getOrDefault(key,"");
    }
}
class main{
    public static void main(String[] args) {
        System.out.println(Seasons.getFormatted("Skyrise"));
    }
}
class季节{
private static Map=new HashMap();
静止的{
地图放置(“天井”、“天井”);
地图。放置(“向上抛”,“向上抛%20”);
}
公共静态字符串getFormatted(字符串键){
返回map.getOrDefault(键“”);
}
}
班长{
公共静态void main(字符串[]args){
System.out.println(Seasons.getFormatted(“Skyrise”);
}
}

如果您想以键入的方式执行此操作,可以使用Enum执行此操作:

enum Season{
    Skyrise,Toss_Up, Sack_Attack;

    @Override
    public String toString() {
        switch(this){
            case Skyrise: return "Skyrise";
            case Toss_Up: return "Toss%20Up";
            case Sack_Attack: return "Sack_Attack";
            default: return "";
        }
    }
}
public class main{
    public static void printSeason(Seasons seasons){
        System.out.println(seasons);
    }
    public static void main(String[] args) {
        Seasons e = Seasons.Skyrise;
        printSeason(e);
        System.out.println(e);
    }
}
由于编译器在内部调用toString(),因此可以像我的示例一样将参数作为字符串或字符串传递


如果您仍然希望在不“不必要地重新生成”的情况下使用映射,则可以使用带有静态初始值设定项的静态字段,如下所示:

class Seasons {
    private static Map<String,String> map = new HashMap<>();
    static {
        map.put("Skyrise", "Skyrise");
        map.put("Toss_Up", "Toss%20Up");
    }
    public static String getFormatted(String key){
        return map.getOrDefault(key,"");
    }
}
class main{
    public static void main(String[] args) {
        System.out.println(Seasons.getFormatted("Skyrise"));
    }
}
class季节{
private static Map=new HashMap();
静止的{
地图放置(“天井”、“天井”);
地图。放置(“向上抛”,“向上抛%20”);
}
公共静态字符串getFormatted(字符串键){
返回map.getOrDefault(键“”);
}
}
班长{
公共静态void main(字符串[]args){
System.out.println(Seasons.getFormatted(“Skyrise”);
}
}

为了在Snoob answer上集成,您可以使用带有字段的enum,因此:

enum Season
{
   Skyrise("Skyrise"),
   Toss_Up("Toss%20Up"), 
   Sack_Attack("Sack%20Attack")

   ;

   public final String fancyName;

   private Season(String fancyName)
   {
     this.fancyName = fancyName;
   }
}

您确实拥有所有的优点,但没有任何缺点。

只需在Snoob answer上集成,您就可以使用带有字段的enum,因此:

enum Season
{
   Skyrise("Skyrise"),
   Toss_Up("Toss%20Up"), 
   Sack_Attack("Sack%20Attack")

   ;

   public final String fancyName;

   private Season(String fancyName)
   {
     this.fancyName = fancyName;
   }
}

你真的拥有了所有的优点而没有任何缺点。

为什么HashMap会重新生成任何东西?如果“格式化”是指“url转义”,您应该使用库来执行此操作,而不是保留一个单独的常量列表。为什么不使用enum?@StriplingWarrior我可以使用哪个库?关于:
String encodedUrl=URLEncoder.encode(String,“UTF-8”);
或者HashMap为什么要重新生成任何内容?如果使用“格式化”您的意思是“url已转义”,您应该使用库来执行此操作,而不是保留一个单独的常量列表。为什么不使用enum?@StriplingWarrior我可以使用哪个库?关于:
String encodedUrl=URLEncoder.encode(字符串,“UTF-8”);
或者最好直接将属性添加到枚举中,而不是将其放在开关中。谢谢,我差点忘了我们可以在枚举中使用属性。可能最好直接将属性添加到枚举中,而不是放在开关中。谢谢,我差点忘了我们可以在枚举中使用属性