K
KevinSimonson
I'm trying to understand how the open source Limewire project's code
works. I'm
taking a look at the source code for enumeration type
<SearchCategory>. It be-
gins like this:
package org.limewire.core.api.search;
import java.util.EnumMap;
import org.limewire.core.api.Category;
/**
* All categories that can be searched.
*/
public enum SearchCategory {
ALL(null, 0),
AUDIO(Category.AUDIO, 1),
VIDEO(Category.VIDEO, 2),
IMAGE(Category.IMAGE, 3),
DOCUMENT(Category.DOCUMENT, 4),
PROGRAM(Category.PROGRAM, 5),
OTHER(Category.OTHER, 6),
TORRENT(Category.TORRENT, 7);
private static final EnumMap<Category, SearchCategory> perCategory
= new EnumMap<Category, SearchCategory>(Category.class);
static {
for(SearchCategory searchCategory : values()) {
if(searchCategory.category != null) {
perCategory.put(searchCategory.category,
searchCategory);
}
}
}
private final Category category;
private final int id;
private SearchCategory(Category category, int id) {
this.id = id;
this.category = category;
}
/**
* Returns the SearchCategory associated with the given Category.
* This will never return {@link SearchCategory#ALL} because
Categories
* are specific to types.
*/
public static SearchCategory forCategory(Category category) {
return perCategory.get(category);
}
It goes on to add more methods. I have no idea what is going on
here. Does
anybody know where I can go to read about Java <enum> types so that I
can under-
stand what this code means? I understand enumeration types from Ada
well
enough, but what's throwing me for a loop is the first parameter in
the paren-
theses after each <enum> constant. For example, take the line that
says,
"VIDEO(Category.VIDEO, 2),". What does <Category.VIDEO> do here?
Also, what's the deal with the class fields <EnumMap>, <category>, and
<id>? In
Ada, if you declare a variable to be of an enumeration type it just
takes one of
a list of values. I had understood that if a variable <sc> was
declared to be
of type <SearchCategory>, then <sc> could be either <ALL>, <AUDIO>,
<VIDEO>, or
any of the other listed values. Can I also get the value <category>
by refer-
ring to <cs.category>?
Finally, after the declaration of <EnumMap>, what's the section
enclosed by
<static {> and <}> all about?
If anybody could explain to me what's going on in this code, or point
me to a
place where this is all documented, I'd really appreciate it.
Kevin Simonson
works. I'm
taking a look at the source code for enumeration type
<SearchCategory>. It be-
gins like this:
package org.limewire.core.api.search;
import java.util.EnumMap;
import org.limewire.core.api.Category;
/**
* All categories that can be searched.
*/
public enum SearchCategory {
ALL(null, 0),
AUDIO(Category.AUDIO, 1),
VIDEO(Category.VIDEO, 2),
IMAGE(Category.IMAGE, 3),
DOCUMENT(Category.DOCUMENT, 4),
PROGRAM(Category.PROGRAM, 5),
OTHER(Category.OTHER, 6),
TORRENT(Category.TORRENT, 7);
private static final EnumMap<Category, SearchCategory> perCategory
= new EnumMap<Category, SearchCategory>(Category.class);
static {
for(SearchCategory searchCategory : values()) {
if(searchCategory.category != null) {
perCategory.put(searchCategory.category,
searchCategory);
}
}
}
private final Category category;
private final int id;
private SearchCategory(Category category, int id) {
this.id = id;
this.category = category;
}
/**
* Returns the SearchCategory associated with the given Category.
* This will never return {@link SearchCategory#ALL} because
Categories
* are specific to types.
*/
public static SearchCategory forCategory(Category category) {
return perCategory.get(category);
}
It goes on to add more methods. I have no idea what is going on
here. Does
anybody know where I can go to read about Java <enum> types so that I
can under-
stand what this code means? I understand enumeration types from Ada
well
enough, but what's throwing me for a loop is the first parameter in
the paren-
theses after each <enum> constant. For example, take the line that
says,
"VIDEO(Category.VIDEO, 2),". What does <Category.VIDEO> do here?
Also, what's the deal with the class fields <EnumMap>, <category>, and
<id>? In
Ada, if you declare a variable to be of an enumeration type it just
takes one of
a list of values. I had understood that if a variable <sc> was
declared to be
of type <SearchCategory>, then <sc> could be either <ALL>, <AUDIO>,
<VIDEO>, or
any of the other listed values. Can I also get the value <category>
by refer-
ring to <cs.category>?
Finally, after the declaration of <EnumMap>, what's the section
enclosed by
<static {> and <}> all about?
If anybody could explain to me what's going on in this code, or point
me to a
place where this is all documented, I'd really appreciate it.
Kevin Simonson