Tags:

สวัสดีครับ ผมข้อสงสัยมาสอบถามครับ

ผมเขียน 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
แล้วไหงมันถึงไม่พอ?

รบกวนด้วยครับ ขอบคุณครับ

Get latest news from Blognone
By: tekkasit
ContributorAndroidWindowsIn Love
on 28 October 2011 - 22:58 #349124
tekkasit's picture

ไอ้ integer constant ใส่ L ต่อท้ายสิครับ

By: Bank14
ContributorAndroidRed HatWindows
on 28 October 2011 - 23:19 #349132 Reply to:349124

ขอบคุณครับ ได้แล้วครับ

By: mr_tawan
ContributoriPhoneAndroidWindows
on 29 October 2011 - 00:32 #349143
mr_tawan's picture

อ่านโค๊ดผ่าน ๆ นึกว่าตัวเลขยาว ๆ เป็นรหัสอะไรสักอย่าง ที่แท้ก็เป็นประเทศ :-)


  • 9tawan.net บล็อกส่วนตัวฮับ
By: tekkasit
ContributorAndroidWindowsIn Love
on 30 October 2011 - 22:15 #349517
tekkasit's picture

แต่ถามผมเรื่องการออกแบบคลาสอ่ะน่ะ

การใช้ฝังค่าจำนวนประชากร ลงไปที่ค่า integer ของ enum แบบนี้มันการออกแบบที่ไม่ควรอย่างยิ่ง มันเป็นการแสดงออกของโครงสร้างภายในมากเกินไปของคลาส

และเมื่อเวลาเปลี่ยนไป (ประชากรเพิ่ม) enum พวกนี้เปลี่ยนไป ซึ่งมันไม่ make sense ที่ต้องมานั่งรีคอมไพล์โค้ดใหม่

enum ก็ใช้ค่าธรรมดาๆ เรียงลำดับไป ส่วน getPopulation นั่นก็ควรจะไปทำ private static array แล้ว lookup แทน

By: cloverink
iPhoneAndroidUbuntuWindows
on 2 November 2011 - 15:24 #350271 Reply to:349517
cloverink's picture

ใช่ครับ enum ใช้ แบ่งแยกเฉยๆ ดีกว่านะครับ เวลาส่งค่ามาค่อยให้ method ไป get ค่าอีกทีครับ :)

By: mr_tawan
ContributoriPhoneAndroidWindows
on 2 November 2011 - 20:08 #350345 Reply to:349517
mr_tawan's picture

Edit : ขอคิดใหม่แ้ล้วจะมาแจม ตอนนี้คิดไม่ออก


  • 9tawan.net บล็อกส่วนตัวฮับ
By: Bank14
ContributorAndroidRed HatWindows
on 6 November 2011 - 15:24 #351229 Reply to:349517

ขอบคุณที่แนะนำครับ พอดีผมพึ่งศึกษา Java ครับ (ความจริงเคยเรียนในคลาส แต่คืนครูไปหมดแล้ว ฮา) ก็เลยลองประยุกต์โจทย์เล่นไปมา

เห็นด้วยครับที่ไม่ควรเก็บเก็บค่าพารามิเตอร์ด้วย enum รู้สึกว่ามันเรียก set&get ลำบาก ใช้ class เรียกเหมือนเดิมดีกว่า