สวัสดีครับ ผมข้อสงสัยมาสอบถามครับ
ผมเขียน enum ดังนี้
public enum Continent2 {
Europe(738199000), NorthAmerica(542056000), SouthAmerica(392555000),
Asia(4164252000), Africa(1022234000), Antarctica(1000), Australia(29127000);
private Continent2(long population) {
this.population = population;
}
public long getPopulation() {
return population;
}
public void addPopulation(long amount) {
population += amount;
}
public long population;
}
พอ compile มันขึ้น error ว่า
"Continent2.java:3: error: integer number too large: 4164252000
Asia(4164252000), Africa(1022234000), Antarctica(1000), Australia(29127000);
^
1 error"
ผมอ่าน error แล้วงง ในเมื่อผมรับพารามิเตอร์เป็น long ซึ่งถ้าอ้างอิงจาก http://download.orac.../datatypes.html มันสามารถเก็บข้อมูลได้สูงสุดถึง 9,223,372,036,854,775,807
แล้วไหงมันถึงไม่พอ?
รบกวนด้วยครับ ขอบคุณครับ
ไอ้ integer constant ใส่ L ต่อท้ายสิครับ
ขอบคุณครับ ได้แล้วครับ
อ่านโค๊ดผ่าน ๆ นึกว่าตัวเลขยาว ๆ เป็นรหัสอะไรสักอย่าง ที่แท้ก็เป็นประเทศ :-)
แต่ถามผมเรื่องการออกแบบคลาสอ่ะน่ะ
การใช้ฝังค่าจำนวนประชากร ลงไปที่ค่า integer ของ enum แบบนี้มันการออกแบบที่ไม่ควรอย่างยิ่ง มันเป็นการแสดงออกของโครงสร้างภายในมากเกินไปของคลาส
และเมื่อเวลาเปลี่ยนไป (ประชากรเพิ่ม) enum พวกนี้เปลี่ยนไป ซึ่งมันไม่ make sense ที่ต้องมานั่งรีคอมไพล์โค้ดใหม่
enum ก็ใช้ค่าธรรมดาๆ เรียงลำดับไป ส่วน getPopulation นั่นก็ควรจะไปทำ private static array แล้ว lookup แทน
ใช่ครับ enum ใช้ แบ่งแยกเฉยๆ ดีกว่านะครับ เวลาส่งค่ามาค่อยให้ method ไป get ค่าอีกทีครับ :)
Edit : ขอคิดใหม่แ้ล้วจะมาแจม ตอนนี้คิดไม่ออก
ขอบคุณที่แนะนำครับ พอดีผมพึ่งศึกษา Java ครับ (ความจริงเคยเรียนในคลาส แต่คืนครูไปหมดแล้ว ฮา) ก็เลยลองประยุกต์โจทย์เล่นไปมา
เห็นด้วยครับที่ไม่ควรเก็บเก็บค่าพารามิเตอร์ด้วย enum รู้สึกว่ามันเรียก set&get ลำบาก ใช้ class เรียกเหมือนเดิมดีกว่า