我需要定义相对大量的类别(开始时大约30个,我们将添加更多)。请考虑以下代码:
(function () {
var element = document.getElementById('submitReg'),
the_form = document.getElementById('the_form'),
current_time = document.getElementById('current_time'),
start, end;
window.onload = function (event) {
start = +event.timeStamp;
};
element.onclick = function (event) {
end = +event.timeStamp;
var diff = end - start; // time difference in milliseconds
console.log(diff);
//Allow the form to submit only after 3000 miliseconds
if(diff > 3000){
return true;
}
return false;
};
//To test if this works...
the_form.onsubmit = function(event){
alert('Form submitted!');
};
})();
我需要声明类别,还需要一种方法来迭代它们。我放弃反思,因为我认为这不是一个很好的做法。
声明同一个类的静态最终字段的大名称,并将它们放在列表中是一个好习惯吗?作为替代方案,我考虑使用public class Category {
public static final Category DRESS = new Category("Dress");
public static final Category SKIRT = new Category("Skirt");
...
private static final List<Category> CATEGORIES = Arrays.aslist(DRESS, SKIRT, ...);
private String name;
public Category(String name) {
this.name = name;
}
//Some static public method to iterate over categories
...
而不是列表,并且字段是用于标识每个类别的整数,因此您可以通过将它们放入地图中来获取类别。这在时间和空间性能方面会更好吗?
PS:这是一个Android项目,如果它改变了什么
答案 0 :(得分:3)
考虑以下代码:
public class Category {
public static final Category DRESS = new Category("Dress");
public static final Category SKIRT = new Category("Skirt");
是的,这实际上就是enums在后台所做的事情,所以
public enum Category {
DRESS("Dress"),
SKIRT("Skirt"),
...;
private String name;
private Category(String name) {
this.name = name;
}
// Category.values() returns the elements as an array
答案 1 :(得分:2)
您应该使用enum
而不是使用new Category("Dress");
创建对象,因为创建对象昂贵比使用enum
。 Java枚举的实现更像是类,因此您可以无缝地更改代码:
public enum Category {
DRESS("Dress"), SKIRT("Skirt");
private final String name;
Category(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
注意:强>
枚举类型的构造函数必须是包私有或私有访问。它会自动创建在枚举主体开头定义的常量。你不能自己调用枚举构造函数。
答案 2 :(得分:1)
我想说使用{{ str.slice }}
就足够了。
只有在必须查找时才应考虑
List
特别是Map
通过一些关键属性(如你的情况下的int)。
如果Category
课程中没有任何属性或方法,请考虑仅使用Category
替换它们。
如果在运行时创建了新的Strings
并且您想要保留它们,请考虑使用数据库或文件来保存类别。
编辑:回答评论中的问题
这取决于Categories
类。如果它的唯一目的是枚举所有类别,并且类本身没有任何其他实例方法或属性,那么就空间复杂度而言,Category
和您的Integer
类是相似的(因为在{ {1}}整数将在Category
类对象中加载
我仍然建议您使用名为Map
的类和列表,如果目的只是迭代它们和/或使用应用程序中其他位置的Integer
类的特定实例,例如。 Category
。
以下示例是一个很好的用例
Category
与
Category.SOME_CATEGORY
后者的问题是你可以传递任何int,它可能是也可能不是类别的有效键。使用类可以进行额外的编译时检查。虽然你总是可以使用someMethod(Category category) {
// do something
}
。但我再次重申,这一切都归结为someMethod(int category) {
// before doing anything
// lookup this category by an int key
// in the the Map<Integer, Category>
}
类是否有任何实例方法或属性。
答案 3 :(得分:0)
对于小型列表,可以使用List
或Map
。
但是对于大型列表,您可能希望将它们存储在数据库中。
同样ArrayList
的{{1}}比使用String
的{{1}}