枚举值和valueOf

时间:2017-11-19 20:02:05

标签: java enums

CREATE PROCEDURE prc_ManagerTotalSales @managerID INT,
                                   @beginDate DATE,
                                   @endDate   DATE,
                            @group VARCHAR(15) = 'total'

AS
BEGIN 

SELECT          
    FirstName + ' ' + e.LastName AS Name,           
   COALESCE(SUM(od.UnitPrice * od.Quantity), 0) AS TotalSales
FROM 
   dbo.Employees e
   LEFT OUTER JOIN dbo.Orders o ON e.EmployeeID = o.EmployeeID
   LEFT OUTER JOIN dbo.[Order Details] od ON o.OrderID = od.OrderID
WHERE 
   (e.EmployeeID = @managerID OR e.ReportsTo = @managerID)
   AND o.OrderDate >= @beginDate
   AND o.OrderDate <= @endDate                            
GROUP BY 
   e.FirstName,
   e.LastName                     
END

}

当调用方法getByShortCut时:getByShortCut(&#34; CS&#34;)我不断收到错误:&#34;没有枚举常量ProgramOfStudy.CS&#34;我在这做错了什么?

2 个答案:

答案 0 :(得分:-1)

如果你需要另一个选项,你可以搞定地图,那么

public class StackOverF {

    public static void main(String[] args) {
        System.out.println("Hello World1");
        System.out.println(ProgramOfStudy.getByShortCut("CS"));
        System.out.println(ProgramOfStudy.getByShortCut("CSI"));
    }
}

public enum ProgramOfStudy {
    ComputerScience("CS"), AutomotiveComputerScience("ACS"), BusinessInformatics("BI");

    public final String shortCut;

    ProgramOfStudy(String shortCut) {
        this.shortCut = shortCut;
    }

    public static ProgramOfStudy getByShortCut(String shortCut) {

        return Arrays.stream(ProgramOfStudy.values())
            .filter(v -> v.shortCut.equals(shortCut))
            .findFirst()
            .orElse(null);
    }
}

答案 1 :(得分:-2)

为什么不在这个问题上应用一点Java 8,而不是在复杂的平等条件下进行循环和纠结?

public enum ProgramOfStudy {
    ComputerScience("CS"), AutomotiveComputerScience("ACS"), BusinessInformatics("BI");

    public final String shortCut;

    private static final Map<String, ProgramOfStudy> shortCutMap = Collections.unmodifiableMap(new HashMap<>() {
        {
            Arrays.stream(ProgramOfStudy.values()).forEach(v -> put(v.shortCut, v));
        }
    });

    ProgramOfStudy(String shortCut) {
        this.shortCut = shortCut;
    }

    public static ProgramOfStudy getByShortCut(String shortCut) {
        return shortCutMap.get(shortCut);
    }
}

public static void main(String[] args) {
    System.out.println(ProgramOfStudy.getByShortCut("CS"));
    System.out.println(ProgramOfStudy.getByShortCut("ACS"));
    System.out.println(ProgramOfStudy.getByShortCut("baasda"));
    System.out.println(ProgramOfStudy.getByShortCut("BI"));
}

如果您运行此代码段,则会打印:

ComputerScience
AutomotiveComputerScience
null
BusinessInformatics

在这种情况下,最好使用映射而不是使用字符串比较的循环。在这种情况下初始化时只有一个循环,然后再也没有。在getByShortCut方法的每个查询中都有一个带字符串比较的循环不是一个好主意。