Java枚举中的方法调用问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java枚举中的方法调用问题相关的知识,希望对你有一定的参考价值。

public enum FragmentsAvailable
UNKNOW,
DIALER,
HISTORY,
HISTORY_DETAIL,
CONTACTS,
CONTACT,
EDIT_CONTACT,
ABOUT,
ABOUT_INSTEAD_OF_SETTINGS,
ABOUT_INSTEAD_OF_CHAT,
ACCOUNT_SETTINGS,
SETTINGS,
CHATLIST,
CHAT;
public boolean isRightOf(FragmentsAvailable fragment)
switch (this)
case HISTORY:
return fragment == UNKNOW;
case HISTORY_DETAIL:
return HISTORY.isRightOf(fragment) || fragment == HISTORY;

case CONTACTS:
return HISTORY_DETAIL.isRightOf(fragment) || fragment == HISTORY_DETAIL;

case CONTACT:
return CONTACTS.isRightOf(fragment) || fragment == CONTACTS;

case EDIT_CONTACT:
return CONTACT.isRightOf(fragment) || fragment == CONTACT;

case DIALER:
return EDIT_CONTACT.isRightOf(fragment) || fragment == EDIT_CONTACT;

case ABOUT_INSTEAD_OF_CHAT:
case CHATLIST:
return DIALER.isRightOf(fragment) || fragment == DIALER;

case CHAT:
return CHATLIST.isRightOf(fragment) || fragment == CHATLIST;

case ABOUT_INSTEAD_OF_SETTINGS:
case SETTINGS:
return CHATLIST.isRightOf(fragment) || fragment == CHATLIST || fragment == FragmentsAvailable.ABOUT_INSTEAD_OF_CHAT;

case ABOUT:
case ACCOUNT_SETTINGS:
return SETTINGS.isRightOf(fragment) || fragment == SETTINGS;

default:
return false;



HISTORY.isRightOf(fragment)这句应该怎么解释?

定义一个简单的枚举代码
public enum WorkDay Monday,Tuesday,Wednesday,Thurday,Friday;//定义时,枚举值间有逗号隔开,最后用分号结束

废话不多说,直接上main 方法,拿去玩玩吧:

Java代码
public static void main(String []args) /** * 枚举类型是一种类型,既然是类型,就是跟int,char他们 一样的, * 拿来定义变量,限制你对变量的赋值,就像 int a,你不能够给a一个 string的值 * 同理,一个枚举用来定义一个变量时,你只能够赋枚举值,其方式为 * "枚举名.值" */ WorkDay myworkday=WorkDay.Wednesday; /** 补充点switch的基础知识,switch语句括号中支持byte \\short \\char \\int类型, * jdk 1.5以后支持枚举,所以,这里可以直接使用枚举变量myworkday。 * 呵呵,在jdk1.7后将switch将支持string */ switch (myworkday) /*枚举重写了toString()方法,所以枚举变量的值不带前缀 * myworkday 里面的值应该是枚举括号里面的那几个 */ case Monday: System.out.println("you work day is Monday !"); break; case Tuesday: System.out.println("you work day is Tuesday!"); break; case Wednesday: System.out.println("you work day is Wednesday !"); break; case Thurday: System.out.println("you work day is Thurday !"); break; case Friday: System.out.println("you work day is Friday !"); break; System.out.println("--------遍历所有值----------"); //----使用values()方法返回一个数组 for(WorkDay day:WorkDay.values()) System.out.println(day); //-----既然是数组,就可以统计大小 System.out.println("WorkDay 里面有 "+WorkDay.values().length+" 个元素"); //--------------------调用 ordinal()方法,返回枚举值在枚举中的索引,数组索引嘛,当然从0开始 System.out.println(WorkDay.Monday.ordinal()); System.out.println(WorkDay.Friday.ordinal()); //---默认实现java.lang.Comparable接口 ,测试测试 System.out.println(WorkDay.Monday.compareTo(WorkDay.Thurday));//结果应该是 -3 //---Monday的索引为0,Thurday为 3,0-3=-3, System.out.println(WorkDay.Friday.compareTo(WorkDay.Tuesday));//同理,结果应该为4-1=3,

简单吧,来点狠的,前面说了,枚举有点像类,只是把class换成了enum,那么它跟一般的类一样可以添加属性或方法。

带方法与属性的enum代码
public enum WeAreJavaer chinese,java, spring, DB2, AIX; // 枚举列表,必须写在最前面,否则编译出错 private final static String location = "javaeye"; //定义一个属性 public static WeAreJavaer getInfomation() WeAreJavaer flag=null; if (location.equals("javaeye")) flag=java; else flag= chinese; return flag;

老规矩,直接上main()方法测试:

写道
public static void main(String []ags) System.out.println("---------------------测试调用枚举中写的方法-------------------------------"); System.out.println("直接调用枚举里面的方法: "+ WeAreJavaer.getInfomation());

3、来点更狠的。

你可以通过括号来给enum赋值,这样的话,你必须有带参的构造方法,还需要有一属性与方法,否则编译时会出错。

另外,你如果给enum里面的元素赋值的话,要么都赋,要么都不赋,不要东赋一个,西赋一个。

如果不赋值则不能写构造方法,如果你赋值了,而没有构造方法,编译还是通不过,废话不多少,来,看:

可赋值的enum代码
public enum People xiaowang(20), xiaozhang(32),xiaoli(50), xiaogou(21); private final int age; People(int value) //构造器只能是默认或者private, 从而保证构造函数只能在内部使用 this.age = value; public int getAge() return age;

好吧,啥也不说了,接下来的事,你懂地:

测试带值enum代码

public static void main(String[] args)
for(People people:People.values())
/*通过getValue()取得相关枚举的值*/
System.out.println(people+" 的年龄 :"+people.getAge());

参考技术A 判断传入的这个枚举常量是否在另一个枚举常量(参数)之后 参考技术B 调用HISTORY对象的isRightOf方法,返回fragment是否等于UNKOWN本回答被提问者采纳

Java中的静态和枚举

一、静态成员

对静态成员最简单的解释,静态成员属于整个类而不属于某个对象,所以又叫做类变量。一个类不管创建多少个实例对象,静态变量在内存中有且只有一个(调用方法用类名调用)。

通常的非静态变量称为实例变量,只有实例化后才可使用。

二、静态方法

类似于静态变量,在类装载时被载入内存,不会自动销毁,不用实例化,且静态方法不能被重写。

静态方法只能访问类中的静态变量和静态方法不能访问实例变量和实例方法(因为静态方法在java虚拟机中在对象之前被加载,如果静态方法要访问实例变量或者方法可能其还没被创建),如果要想使用实例变量和方法可在静态方法中直接创建其实例化的对象。

三、枚举

enum  表示可以计数的一种类型

列举一个遍历枚举类的方法:

package None5;

public enum Day {
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday;
}


package None5;

public class Ergodic {
    public static void main(String[] args) {
        for(Day d:Day.values()) {
            System.err.println(d.toString());
        }
    }
}

 

 

四、一个综合静态和枚举的例子

package None4;

public enum personGender {
    Male,
    Female;
}
package None4;

public class Person {
    private String name;
    private int age;
    private personGender gender;
    //静态国籍变量
    private static String nation;
    
    
    //set方法
    public void setName(String name) {
        this.name = name;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public void setGender(personGender gender) {
        this.gender = gender;
    }
    public static void setNation(String nation) {
        Person.nation=nation;
    }
    
    //get方法
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public personGender getGender() {
        return gender;
    }
    
    //show方法
    public static void show() {
        Person person = new Person();
        person.setName("lemon");
        person.setAge(20);
        person.setGender(personGender.Male);
        System.err.println(String.format("姓名=%s,性别=%s,年龄=%d,国籍=%s", person.name,person.gender,person.age,nation));
    }
}
package None4;

public class client {
    public static void main(String[] args) {
        
        //静态成员属于整个类而不是某个对象,所以这里应该用Person调用
        Person.setNation("CHINA");
        Person.show();
    }
}

运行结果:

姓名=lemon,性别=Male,年龄=20,国籍=CHINA

 

第一篇博客,加油!

努力努力再努力!


以上是关于Java枚举中的方法调用问题的主要内容,如果未能解决你的问题,请参考以下文章

Java中的静态和枚举

java 枚举

Java中枚举值的可见性

如何使用mockito调用枚举类型中的私有方法

如何在Java中包含多个方法?枚举不是正确的方法吗?

Java枚举类型在后台响应中的使用