জাভাতে কোনও এনামকে সংখ্যার মান নির্ধারণ করা কি সম্ভব?


132

জাভাতে কি এরকম কিছু সম্ভব? কেউ কি জাভাতে এনাম উপাদানগুলির জন্য কাস্টম সংখ্যাসূচক মান নির্ধারণ করতে পারে?

public enum EXIT_CODE {
    A=104, B=203;
}

আপনি যেমন লিখেছেন সরাসরি যেমন নয়, যেখানে একটি এনাম মান একটি সংখ্যার সমান হয় তবে হ্যাঁ পরোক্ষভাবে বেন এস এর লিঙ্কে দেখানো হয়েছে।
ইয়েল


@ বেনোইট আমি মনে করি না যে এটি একটি দ্বৈত: যেটি কেবল প্রথম মান নির্ধারণ এবং সেখান থেকে ইনক্রিমেন্টিং সম্পর্কে, এটি সমস্ত মান নির্ধারণের বিষয়ে। তবে অবশ্যই সম্পর্কিত।
সিরো সান্তিলি :5 冠状 病 六四 事件 法轮功

উত্তর:


216
public enum EXIT_CODE {
    A(104), B(203);

    private int numVal;

    EXIT_CODE(int numVal) {
        this.numVal = numVal;
    }

    public int getNumVal() {
        return numVal;
    }
}

11
আপনি কোডটিতে এনাম কনস্ট্রাক্টর ব্যবহার করতে পারবেন না। EXIT_CODE.Aএবং EXIT_CODE.Bএকমাত্র উদাহরণ যা সর্বদা বিদ্যমান থাকবে।
ভেশে গুরুং

2
বিশেষ করে @IgorGanapolsky, একটি enum প্রস্ততকর্তার হতে পারে না সার্বজনীন: stackoverflow.com/questions/3664077/...
সিরো Santilli郝海东冠状病六四事件法轮功

এটি কি এখনও জিএসএন এবং জসন থেকে রূপান্তর করে কাজ করবে।
জাপানোলজিকা

4
আপনি ভেরিয়েবলটি "পাবলিক ফাইনাল ইন্ট নাম্বাল" ঘোষণা করতে পারেন এবং এক্সেসর পদ্ধতির প্রয়োজন ছাড়াই কেবল এটি সরাসরি EXIT_CODE.A.numVal (আমি নামটির পছন্দ পছন্দ করি) হিসাবে অ্যাক্সেস করতে পারি। এটি চূড়ান্ত হওয়ায় এটি কেবল নির্মাত্রে সেট করা যেতে পারে। আইএমও এটি কিছুটা ক্লিনার কোডের দিকে নিয়ে যায় তবে এটি বেশিরভাগ পছন্দের বিষয়, আমি মনে করি। একটি চূড়ান্ত পরিবর্তনশীল ব্যবহার আপনাকে একটি পদ্ধতির সংজ্ঞা সংরক্ষণ করে।
স্টিভ ফার্গুসন

34

হ্যাঁ , এবং তারপরে ডকুমেন্টেশন থেকে কিছু উদাহরণ:

public enum Planet {
    MERCURY (3.303e+23, 2.4397e6),
    VENUS   (4.869e+24, 6.0518e6),
    EARTH   (5.976e+24, 6.37814e6),
    MARS    (6.421e+23, 3.3972e6),
    JUPITER (1.9e+27,   7.1492e7),
    SATURN  (5.688e+26, 6.0268e7),
    URANUS  (8.686e+25, 2.5559e7),
    NEPTUNE (1.024e+26, 2.4746e7);

    // in kilograms
    private final double mass;
    // in meters
    private final double radius;
    Planet(double mass, double radius) {
        this.mass = mass;
        this.radius = radius;
    }
    private double mass() { return mass; }
    private double radius() { return radius; }

    // universal gravitational 
    // constant  (m3 kg-1 s-2)
    public static final double G = 6.67300E-11;

    double surfaceGravity() {
        return G * mass / (radius * radius);
    }
    double surfaceWeight(double otherMass) {
        return otherMass * surfaceGravity();
    }
    public static void main(String[] args) {
        if (args.length != 1) {
            System.err.println("Usage: java Planet <earth_weight>");
            System.exit(-1);
        }
        double earthWeight = Double.parseDouble(args[0]);
        double mass = earthWeight/EARTH.surfaceGravity();
        for (Planet p : Planet.values())
           System.out.printf("Your weight on %s is %f%n",
                             p, p.surfaceWeight(mass));
    }
}

আপনার পাবলিক স্ট্যাটিক অকার্যকর মূল (স্ট্রিং [] আরগস) এনামের ভিতরেই কেন ??
ইগোরগানাপলস্কি

3
@ ইগোরগানাপলস্কি উদাহরণটি স্ব-অন্তর্ভুক্ত করার জন্য আমার ধারণা!
mat_boy

2
@ ইগোরগানাপলস্কি: কারণ এটি সরকারী দস্তাবেজে ( হ্যাঁ-লিঙ্ক অনুসরণ করুন )
সার্ভিস ইন-

@ ব্যবহারকারী 1587329 আকর্ষণীয়, আমি অনুমান করি যে এটি কেবল পরীক্ষার উদ্দেশ্যে। আমি প্রডাকশন রিলিজ কোডে এটি ব্যবহার করার কোনও উপায় দেখতে পাচ্ছি না ...
ইগোরগানাপলস্কি

12

ধরে নিই যে EXIT_CODE উল্লেখ করছে System . exit(প্রস্থান_কোড) তবে আপনি করতে পারেন

enum ExitCode
{
      NORMAL_SHUTDOWN ( 0 ) , EMERGENCY_SHUTDOWN ( 10 ) , OUT_OF_MEMORY ( 20 ) , WHATEVER ( 30 ) ;

      private int value ;

      ExitCode ( int value )
      {
           this . value = value ;
      }

      public void exit ( )
      {
            System . exit ( value ) ;
      }
}

তারপরে আপনি আপনার কোডের যথাযথ দাগগুলিতে নিম্নলিখিতটি রাখতে পারেন

ExitCode . NORMAL_SHUTDOWN . exit ( ) '


3

মান নির্ধারণের জন্য ভেশে গুরুংয়ের উত্তর প্রসারিত করে আপনি মান সেট করার ক্ষেত্রে সুস্পষ্ট পদ্ধতি যুক্ত করতে পারেন

   public ExitCode setValue( int value){
      //  A(104), B(203);
      switch(value){
        case 104: return ExitCode.A;
        case 203: return ExitCode.B;
        default:
                   return ExitCode.Unknown //Keep an default or error enum handy
      }
   }

কলিং অ্যাপ্লিকেশন থেকে

int i = 104; 
ExitCode serverExitCode = ExitCode.setValue(i);

// আপনি এখন থেকে বৈধ এনাম আছে

[তার উত্তরে মন্তব্য করতে অক্ষম, তাই আলাদাভাবে পোস্ট করা]


2

আপনি যদি ক্লাসে গ্রুপ কনস্ট্যান্টদের কোনও উপায় সন্ধান করছেন, আপনি একটি স্থির অভ্যন্তর শ্রেণি ব্যবহার করতে পারেন:

public class OuterClass {
    public void exit(boolean isTrue){
        if(isTrue){
            System.exit(ExitCode.A);
        }else{
            System.exit(ExitCode.B);
        }
    }
    public static class ExitCode{
        public static final int A = 203;
        public static final int B = 204;
    }   
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.