javascript

git

java

python

git-remote

c++

github

django

c#

reactjs

node.js

performance

branch-prediction

git-commit

git-revert

validation

email-validation

undefined

scrum

kubernetes

使用Rails时,在Ruby中处理常量的最佳方法是什么?

我有一些常量,代表我的模型字段之一中的有效选项。 在Ruby中处理这些常量的最佳方法是什么?

trans by 2020-08-01T15:19:01Z

设计模式-您在C ++中使用哪种Typesafe枚举?

众所周知,C ++中的内置枚举不是类型安全的。我想知道在那里使用哪些实现类型安全枚举的类...我本人使用以下“自行车”,但它有点冗长和有限:

typesafeenum.h:

struct TypesafeEnum
{
// Construction:
public:
    TypesafeEnum(): id (next_id++), name("") {}
    TypesafeEnum(const std::string& n): id(next_id++), name(n) {}

// Operations:
public:
    bool operator == (const TypesafeEnum& right) const;
    bool operator != (const TypesafeEnum& right) const;
    bool operator < (const TypesafeEnum& right) const;

    std::string to_string() const { return name; }

// Implementation:
private:
    static int next_id;
    int id;
    std::string name;
};

typesafeenum.cpp:

int TypesafeEnum::next_id = 1;

bool TypesafeEnum::operator== (const TypesafeEnum& right) const 
{ return id == right.id; }

bool TypesafeEnum::operator!= (const TypesafeEnum& right) const 
{ return !operator== (right); }

bool TypesafeEnum::operator< (const TypesafeEnum& right) const  
{ return id < right.id; }

用法:

class Dialog 
{
 ...
    struct Result: public TypesafeEnum
    {
        static const Result CANCEL("Cancel");
        static const Result OK("Ok");
    };


    Result doModal();
 ...
};

const Dialog::Result Dialog::Result::OK;
const Dialog::Result Dialog::Result::CANCEL;

加成:我认为我应该更具体地说明这些要求。 我将尝试总结一下:

优先级1:毫无例外,将枚举变量设置为无效值应该是不可能的(编译时错误)。

优先级2:应该可以通过单个显式函数/方法调用将枚举值与int转换。

优先级3:尽可能紧凑,优雅,方便的声明和使用

优先级4:将枚举值与字符串进行相互转换。

优先级5 :(很高兴)迭代枚举值的可能性。

trans by 2020-07-19T19:18:19Z

C ++枚举是否从0开始?

如果我有一个enum没有为枚举分配数字,则其序数值为0吗? 例如:

enum enumeration { ZERO,
                   ONE,
                   TWO,
                   THREE,
                   FOUR,
                   FIVE,
                   SIX,
                   SEVEN,
                   EIGHT,
                   NINE };

我已经找到了一个帖子,指出C99标准要求使用0序数。 但是我知道C ++忽略了C99标准中的几件事。 我还能够找到一个使用序数1见证编译器的帖子,我似乎还记得,虽然我不能说是多久了。

我真的很想看到一个针对C ++的答案,但我也想知道序数0是否成立,即使我在enum的中间指定了一个值:

enum enumeration { ZERO,
                   ONE,
                   TWO,
                   THREE = 13,
                   FOUR,
                   FIVE,
                   SIX,
                   SEVEN,
                   EIGHT,
                   NINE };
trans by 2020-07-07T11:59:18Z

Java获取给定Enum值的Enum名称

给定值,如何获取Java Enum类型的名称?

我有以下适用于特定Enum类型的代码,我可以使其更通用吗?

public enum Category {

    APPLE("3"), 
    ORANGE("1"), 

    private final String identifier;

    private Category(String identifier) {
        this.identifier = identifier;
    }

    public String toString() {
        return identifier;
    }

    public static String getEnumNameForValue(Object value){
        Category[] values = Category.values();
        String enumValue = null;
        for(Category eachValue : values) {
            enumValue = eachValue.toString();

            if (enumValue.equalsIgnoreCase(value)) {
                return eachValue.name();
            }
        }
        return enumValue;
    }
}
trans by 2020-06-17T12:28:46Z

集合-Java:从Set <String>进行枚举

我有一个简单的收藏问题。 我有Set<String>对象。 我想要该集合中的字符串的枚举。 最干净/最好的方法是什么?

trans by 2020-02-15T11:30:26Z

.net-枚举扩展方法

在vs2008中,是否可以编写适用于任何枚举的扩展方法。

我知道您可以针对特定的枚举编写扩展方法,但是我希望能够使用单个扩展方法进行每个枚举。 这可能吗?

trans by 2020-01-03T11:57:28Z

查找表最佳实践:数据库表...或枚举

如果我们必须将可用职位存储在公司中(即经理,团队负责人等)。 存储它的最佳实践是什么? 我有两种意见,有评论...“确定,欢迎您”

  1. 将其存储为具有ID和Name列的数据库表,并使用查询和联接对其进行处理。
  2. 将其存储为Enum而不用担心数据库表。

我认为,如果我要更改项目,我将选择第一个解决方案。 这样我就不会将这些选项硬编码为Enum。
如果我毫不怀疑数据不会更改,则可以选择Enum解决方案(例如,性别:男,女)。

注意:我使用英语编码,并且UI文化可能是阿拉伯语。 如果我将使用枚举解决方案,那么我将在表示层中对基于文化的字符串进行硬编码,从最佳实践的角度来看还可以!!!!

我想知道您的意见,以及我的想法是否与最推荐的“最佳做法”相对应?

trans by 2019-11-17T22:44:31Z

java-通过枚举hastable键的枚举迭代将引发NoSuchElementException

我试图使用枚举遍历哈希表中的键列表,但是我在列表中的最后一个键处始终收到NoSuchElementException吗?

Hashtable<String, String> vars = new Hashtable<String, String>();

vars.put("POSTCODE","TU1 3ZU");
vars.put("EMAIL","job.blogs@lumesse.com");
vars.put("DOB","02 Mar 1983");

Enumeration<String> e = vars.keys();

while(e.hasMoreElements()){

System.out.println(e.nextElement());
String param = (String) e.nextElement();
}

控制台输出:

EMAIL
POSTCODE
Exception in thread "main" java.util.NoSuchElementException: Hashtable Enumerator
    at java.util.Hashtable$Enumerator.nextElement(Unknown Source)
    at testscripts.webdrivertest.main(webdrivertest.java:47)

trans by 2019-11-12T17:06:57Z

Java枚举和具有私有构造函数的类之间有什么区别?

这个问题在这里已有答案:

  • 与具有公共静态final字段的类相比,Java枚举有什么优势?                                     15个答案

我试图了解Java枚举是如何工作的,我得出的结论是,它与将其构造函数声明为private的普通Java类非常相似。

我刚刚得出这个结论,它并不是基于很多思考,但是我想知道我是否错过了任何事情。

因此,下面是一个简单的Java枚举和一个等效的Java类的实现。

public enum Direction {
    ENUM_UP(0, -1),
    ENUM_DOWN(0, 1),
    ENUM_RIGHT(1, 0),
    ENUM_LEFT(-1, 0);


    private int x;
    private int y;

    private Direction(int x, int y){
        this.x = x;
        this.y = y;
    }
    public int getEnumX(){
        return x;
    }
    public int getEnumY(){
        return y;
    }
}

上面和下面的代码在含义上有什么区别?

public class Direction{
    public static final Direction UP = new Direction(0, -1) ;
    public static final Direction DOWN = new Direction(0, 1) ;
    public static final Direction LEFT = new Direction(-1, 0) ;
    public static final Direction RIGHT = new Direction(1, 0) ;


    private int x ;
    private int y ;

    private Direction(int x, int y){
        this.x = x ;
        this.y = y ;
    }
    public int getX(){
        return x;
    }
    public int getY(){
        return y;
    }
}
trans by 2019-11-06T04:15:58Z

使用Java泛型迭代枚举值

我正在尝试找到一种在使用泛型时遍历枚举值的方法。 不确定如何执行此操作或不确定是否可行。

以下代码说明了我想做的事情。 请注意,代码T.values()在以下代码中无效。

public class Filter<T> {
    private List<T> availableOptions = new ArrayList<T>();
    private T selectedOption;

    public Filter(T selectedOption) {
        this.selectedOption = selectedOption;
        for (T option : T.values()) {  // INVALID CODE
            availableOptions.add(option);
        }
    }
}

这是实例化Filter对象的方法:

Filter<TimePeriod> filter = new Filter<TimePeriod>(TimePeriod.ALL);

枚举定义如下:

public enum TimePeriod {
    ALL("All"), 
    FUTURE("Future"), 
    NEXT7DAYS("Next 7 Days"), 
    NEXT14DAYS("Next 14 Days"), 
    NEXT30DAYS("Next 30 Days"), 
    PAST("Past"),
    LAST7DAYS("Last 7 Days"), 
    LAST14DAYS("Last 14 Days"),
    LAST30DAYS("Last 30 Days"); 

    private final String name;

    private TimePeriod(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

我意识到将枚举的值复制到列表中可能没有意义,但是我使用的库需要一个数值列表作为输入,并且不适用于枚举。


编辑2/5/2010:

提出的大多数答案都非常相似,并建议执行以下操作:

class Filter<T extends Enum<T>> {
    private List<T> availableOptions = new ArrayList<T>();
    private T selectedOption;

    public Filter(T selectedOption) {
        Class<T> clazz = (Class<T>) selectedOption.getClass();
        for (T option : clazz.getEnumConstants()) {
            availableOptions.add(option);
        }
    }
}

如果我可以确定selectedOption具有非null值,那么这将非常有用。 不幸的是,在我的用例中,该值通常为null,因为也有一个公共Filter()no-arg构造函数。 这意味着我不能在没有NPE的情况下执行selectedOption.getClass()。 该过滤器类管理可用选项的列表,其中选择了哪个选项。 如果未选择任何内容,则selectedOption为null。

我唯一想解决的办法是在构造函数中实际传递一个Class。 所以像这样:

class Filter<T extends Enum<T>> {
    private List<T> availableOptions = new ArrayList<T>();
    private T selectedOption;

    public Filter(Class<T> clazz) {
        this(clazz,null);
    }

    public Filter(Class<T> clazz, T selectedOption) {
        this.selectedOption = selectedOption;
        for (T option : clazz.getEnumConstants()) {
            availableOptions.add(option);
        }
    }
}

有什么想法在不需要构造函数中额外的Class参数的情况下如何执行此操作?

trans by 2019-10-05T02:03:19Z

C#-foreach标识符和闭包

在下面的两个摘要中,第一个是安全的还是第二个必须做?

安全地说,每个线程是否保证从创建线程的同一循环迭代中调用Foo上的方法?

还是必须将引用复制到新变量“ local”到循环的每次迭代中?

var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{      
    Thread thread = new Thread(() => f.DoSomething());
    threads.Add(thread);
    thread.Start();
}

-

var threads = new List<Thread>();
foreach (Foo f in ListOfFoo)
{      
    Foo f2 = f;
    Thread thread = new Thread(() => f2.DoSomething());
    threads.Add(thread);
    thread.Start();
}

更新:正如Jon Skeet的答案中指出的那样,这与线程无关。

trans by 2019-09-22T07:39:11Z

c ++ - (如何)我可以计算枚举中的项目吗?

当我有类似的东西时,我想到了这个问题

enum Folders {FA, FB, FC};

并希望为每个文件夹创建一个容器数组:

ContainerClass*m_containers[3];
....
m_containers[FA] = ...; // etc.

(使用地图它更优雅使用:FC

但回到我原来的问题:如果我不想对数组大小进行硬编码,有什么方法可以找出文件夹中有多少项? (不依赖于例如FC是列表中的最后一项,如果我没有弄错的话会允许像ContainerClass*m_containers[FC+1]这样的东西。)

trans by 2019-09-13T07:01:29Z

c# - .NET库中是否有针对Month的预定义枚举?

我想查看.net框架中是否存在数月的官方枚举。

我觉得有一个,因为月份的使用有多常见,并且因为.net框架中还有其他这样的枚举。

例如,有一个星期几的枚举,System.DayOfWeek,包括星期一,星期二等。

我想知道这一年中是否有一个月,即1月,2月等?

有人知道吗?

trans by 2019-08-09T07:39:37Z

Java Enum方法

我想声明一个enum Direction,它有一个返回相反方向的方法(下面的语法不正确,即枚举不能实例化,但它说明了我的观点)。 这在Java中可行吗?

这是代码:

public enum Direction {

     NORTH(1),
     SOUTH(-1),
     EAST(-2),
     WEST(2);

     Direction(int code){
          this.code=code;
     }
     protected int code;
     public int getCode() {
           return this.code;
     }
     static Direction getOppositeDirection(Direction d){
           return new Direction(d.getCode() * -1);
     }
}
trans by 2019-07-28T19:07:28Z

集合 - Java Enumeration和I之间的区别

这两个接口之间的确切区别是什么? Iterator是否比使用Iterator有好处? 如果有人可以详细说明,那么参考文章将不胜感激。

trans by 2019-07-06T00:20:02Z

C#中的枚举方法

在Java中,可以在枚举中包含方法。

在C#中是否存在这样的可能性,或者它只是一个字符串集合而且它是什么?

我试图覆盖ToString(),但它不编译。 有人有简单的代码示例吗?

trans by 2019-07-04T12:28:11Z

lambda - 在Java 8中迭代枚举

是否可以使用Lambda Expression迭代Enumeration? 以下代码片段的Lambda表示形式是什么:

Enumeration<NetworkInterface> nets = NetworkInterface.getNetworkInterfaces();

while (nets.hasMoreElements()) {
    NetworkInterface networkInterface = nets.nextElement();

}

我没有在其中找到任何流。

trans by 2019-06-20T02:29:40Z

c# - 迭代器和枚举之间的区别

.NET 3.5作业的面试问题是“迭代器和枚举器之间有什么区别”?

这是一个核心区别,LINQ等等。

无论如何,有什么区别? 我似乎无法在网上找到一个可靠的定义。 毫无疑问,我可以找到两个术语的含义,但我得到的答案略有不同。 面试的最佳答案是什么?

IMO迭代器“迭代”集合,枚举器提供迭代功能,但必须调用它。

此外,使用yield关键字据说可以保存状态。 究竟是什么状态? 是否有这种好处的例子?

trans by 2019-06-19T09:14:33Z

c# - 在Enum中搜索字符串并返回Enum

我有一个枚举:

public enum MyColours
{
    Red,
    Green,
    Blue,
    Yellow,
    Fuchsia,
    Aqua,
    Orange
}

我有一个字符串:

string colour = "Red";

我希望能够回归:

MyColours.Red

从:

public MyColours GetColour(string colour)

到目前为止,我有:

public MyColours GetColours(string colour)
{
    string[] colours = Enum.GetNames(typeof(MyColours));
    int[]    values  = Enum.GetValues(typeof(MyColours));
    int i;
    for(int i = 0; i < colours.Length; i++)
    {
        if(colour.Equals(colours[i], StringComparison.Ordinal)
            break;
    }
    int value = values[i];
    // I know all the information about the matched enumeration
    // but how do i convert this information into returning a
    // MyColour enumeration?
}

如你所见,我有点卡住了。 无论如何都要按值选择枚举器。 就像是:

MyColour(2) 

会导致

MyColour.Green
trans by 2019-06-05T11:32:51Z

如何在Swift中获取枚举值的名称?

如果我有一个原始city值的枚举:

enum City: Int {
  case Melbourne = 1, Chelyabinsk, Bursa
}

let city = City.Melbourne

如何将city值转换为字符串Melbourne? 这种类型的名称内省是否可用于该语言?

像(这段代码不起作用):

println("Your city is \(city.magicFunction)")
> Your city is Melbourne
trans by 2019-06-03T00:01:07Z

1 2 下一页 共2页