HỎI Tạo base cho class enum

ngtheanh.dev

New Member
25/12/20
14
5
3
Hà Nội
Java:
enum Token {
    FIZZ("fizz"),
    BUZZ("buzz"),
    UNKNOW("unknow"),
    ;

    private final String value;
    private static String[] values;

    public String getValue() {
        return this.value;
    }

    public static String[] lookUp() {
        if (values == null) {
            values = Arrays.stream(Token.values())
                .map(e -> e.value)
                .toArray(String[]::new);
        }
        return values;
    }
}
Java:
enum Token_1 {
    FIZZ_1("fizz_1"),
    BUZZ_1("buzz_1"),
    UNKNOW_1("unknow_1"),
    ;

    private final String value;
    private static String[] values;

    public String getValue() {
        return this.value;
    }

    public static String[] lookUp() {
        if (values == null) {
            values = Arrays.stream(Token.values())
                .map(e -> e.value)
                .toArray(String[]::new);
        }
        return values;
    }
}
Nếu trong code ta có rất nhiều class Enum Token,Token_1,... như trên và đều có hàm lookUp() thì có cách nào để viết base cho chúng được không nhỉ? Mình có thử dùng interface với generic nhưng chưa làm được. Có tìm hiểu trên google thì có solution gần giống là dùng Design Pattern: Command Pattern, nhưng như thế thì còn cồng kềnh hơn là việc viết từng hàm lookUp() trong từng class Enum
 

Joe

Thành viên VIP
21/1/13
2,925
1,312
113
Object-Oriented Programming Language allows an Object to be extended (or have children). JAVA is not an exception. If you have several Enum Objects why don't you create a generic enum class and the others are the extensions of the generic enum? Example:
Java:
public class TokenGeneric {
    ....
    public String[] lookUp() {
      ...
    }
}
then the others would be
Java:
public class Token1 extends TokenGeneric {
    ...
}
and all children inherit the same method lookup.... You got it?
 

ngtheanh.dev

New Member
25/12/20
14
5
3
Hà Nội
Object-Oriented Programming Language allows an Object to be extended (or have children). JAVA is not an exception. If you have several Enum Objects why don't you create a generic enum class and the others are the extensions of the generic enum? Example:
Java:
public class TokenGeneric {
    ....
    public String[] lookUp() {
      ...
    }
}
then the others would be
Java:
public class Token1 extends TokenGeneric {
    ...
}
and all children inherit the same method lookup.... You got it?
Okay i got OOP can do what and know how to use. But I want to try implement abstract with enum type not class
 

ngtheanh.dev

New Member
25/12/20
14
5
3
Hà Nội
What is the difference between "abstract" and "class" ?
Câu này hỏi google thì sẽ tốt hơn. Và vấn đề ở đây là tôi đang đi tìm cách hạn chế viết đi viết lại 1 hàm giống nhau trong từng enum mà tôi sử dụng. Tôi hiểu cách của bạn và có lẽ bạn cũng hiểu vấn đề của tôi và sau khi tìm hiểu thì tôi chưa thấy cách giải quyết nào cho vấn đề này. Có lẽ đây là một hạn chế của việc sử dụng enum. Sau này nếu tôi có tìm được cách giải quyết hoặc ai đó biết thì hi vọng họ để lại câu trả lời ở đây cho forum biết :D
 

ngtheanh.dev

New Member
25/12/20
14
5
3
Hà Nội
@ngtheanh.dev
because of your posted title Tao base cho class enum I gave you an answer with the frame as an example.
Based on your reply

I had to raise the question about abstract and class. Your angry reply

You seem to be very emotional if someone doubts your knowledge. Google for an answer is NOT the solution. The basic knowledge and where to retrieve information are more reliable for an answer. Back to your "Tao base cho class enum".
Oracle's Doc says

Meaning: enum is "known" at the execution time (or compiling time) because it contains only unchangeable predefined data and static methods. Therefore enum class is a FINAL class (like String) and cannot be extended.
  • What are the unchangeable predefined data? They are no other things than CONSTANTS (hence they have to be written by convention in upper case)
  • What is a static method? It's a kind of CONSTANT that processes something and cannot be changed.
You should learn JAVA from the source (click HERE) and NOT by googling for the answers. It causes more doubts than facts.
Sorry for my angry reply. I remember read your first comment and are you edited? But I am very grateful for this answer and I know you right after research. Wish I know you earlier >:D<
 
  • Like
Reactions: Joe

Joe

Thành viên VIP
21/1/13
2,925
1,312
113
@ngtheanh.dev
Yes, I deleted it because I didn't want any further misunderstanding about my comment. Anyway, you are always welcome here and always are my guest.
 
  • Love
Reactions: ngtheanh.dev