小编Hos*_*Aly的帖子

处理意外枚举值的首选方法是什么?

假设我们有一个接受枚举值的方法.在此方法检查该值是否有效之后,它将switch覆盖可能的值.所以问题是,在验证了值范围,处理意外值的首选方法是什么?

例如:

enum Mood { Happy, Sad }

public void PrintMood(Mood mood)
{
    if (!Enum.IsDefined(typeof(Mood), mood))
    {
        throw new ArgumentOutOfRangeException("mood");
    }

    switch (mood)
    {
        case Happy: Console.WriteLine("I am happy"); break;
        case Sad:   Console.WriteLine("I am sad"); break;
        default: // what should we do here?
    }
Run Code Online (Sandbox Code Playgroud)

处理default案件的首选方法是什么?

  • 发表评论 // can never happen
  • Debug.Fail()(或Debug.Assert(false))
  • throw new NotImplementedException() (或任何其他例外)
  • 其他一些我没有想过的方法

.net c# java language-agnostic enums

16
推荐指数
3
解决办法
3865
查看次数

是否可以在Java中指定类型参数的上限和下限约束?

是否可以在Java中指定类型参数的上限和下限约束?

在Sun的论坛中发现了一个对话,其中讨论了这个问题(显然在仿制药功能最终确定之前),但没有最终答案.

总之,是否有一个有效的语法来执行此操作:

public class MyClass<T extends Number super Integer>
Run Code Online (Sandbox Code Playgroud)

java generics

16
推荐指数
2
解决办法
2258
查看次数

可以合并Java枚举(如C#中的Bitwise)吗?

Java中是否有一种方法可以声明其值可以一起使用的枚举?例如:

enum FileAccess { Read, Write, ReadWrite }
Run Code Online (Sandbox Code Playgroud)

是否可以将ReadWrite定义为Read | Write(或产生相同结果的任何东西)?

java enums

15
推荐指数
1
解决办法
6523
查看次数

C#类没有实现继承的抽象成员

如果我问一些愚蠢的东西,我很抱歉,但我完全是C#和ASP.NET的新手.我的代码中有错误,我不明白.我正在使用Visual Studio 2008.

在这行代码中:

public class SQLFAQProvider : DBFAQProvider
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Moby.Commerce.DataAccess.FAQ.SQLFAQProvider 不实现继承的抽象成员 Moby.Commerce.DataAccess.FAQDBFAQProvider.DeleteFAQbyID(int)

当我转到DBFAQProvider错误是在这行代码中:

public abstract DBFAQ DeleteFAQbyID(int fAQID);
Run Code Online (Sandbox Code Playgroud)

我该怎么改变来纠正它?

c#

15
推荐指数
4
解决办法
6万
查看次数

Scala初始化行为

请查看以下代码.

trait MyTrait { val myVal : String }

class MyClass extends MyTrait { val myVal = "Value" }

class MyClass2(val myVal: String) extends MyTrait 
Run Code Online (Sandbox Code Playgroud)

为什么初始化顺序在MyClassMyClass2?的情况下有所不同?构造函数MyClass将为

MyClass() {
  MyTrait$class.$init$(this);
  myVal = value
}
Run Code Online (Sandbox Code Playgroud)

构造函数MyClass2将是

MyClass2(String myVal) { this.myVal = myVal; MyTrait$class.$init$(this) }
Run Code Online (Sandbox Code Playgroud)

我认为初始化顺序应该像MyClass2构造函数那样,两种情况都是一样的.

scala initialization traits

15
推荐指数
1
解决办法
3402
查看次数

复制构造器有什么问题?为什么要使用Cloneable接口?

编程C++时,我们习惯于在需要时创建复制构造函数(或者我们被教导).几年前切换到Java时,我注意到现在正在使用Cloneable接口.C#遵循定义ICloneable接口的相同路由.在我看来,克隆是OOP定义的一部分.但我想知道,为什么创建这些接口,并且复制构造函数似乎已被删除?

当我想到它时,我开始认为如果需要复制一个类型未知的对象(如对基类型的引用),则复制构造函数将没有用处.这看似合乎逻辑.但我想知道是否还有其他原因我不知道,Cloneable接口是否比拷贝构造器更受青睐?

oop class-design

14
推荐指数
1
解决办法
8291
查看次数

为什么Java的可克隆接口不是通用的?

Java 5引入了泛型,它们被添加到java.lang包中的许多接口中.但是,Cloneable没有得到泛型.我想知道为什么?


编辑:回答@Jon和@litb的答案,以及@Earwicker的评论,我想的Cloneable可能是:

public interface Cloneable<T> {
    public T clone();
}
Run Code Online (Sandbox Code Playgroud)

这里T clone();覆盖Object.clone(),给它一个协变类型.我相信这仍然会向后兼容并提高类型安全性.那为什么不呢?


编辑2:从下面的答案(和评论)中可以看出,上面建议的界面会破坏向后兼容性.由于Object.clone()IS protected,在接口重写它会迫使所有的实施者提供了一个public实现,类的设计者可能不希望(即它们可能会选择保留它protected).

java generics

14
推荐指数
3
解决办法
7687
查看次数

在C#中,我应该在哪里保留计时器的参考?

文档System.Threading.Timer说我应该为它保留一个实时参考,以避免它被垃圾收集.但是我应该在哪里这样做?我main很简单,我不知道在哪里保留参考:

class Program {
    static void Main() {
        new System.Threading.Thread(myThreadStart).Start();
        new System.Threading.Timer(myTimerCallback, new MyStateObject(), 0, 5000);
    }
}
Run Code Online (Sandbox Code Playgroud)

我想过保持在参考static该领域Program类,假设static领域没有得到收集,直到应用程序结束.但我不确定这是最好的方法,所以我很感激你的建议.

.net c# garbage-collection reference timer

14
推荐指数
2
解决办法
4684
查看次数

在.NET中显示类层次结构的工具

有没有一种方法/工具可以显示我在项目中实现某个界面的所有类/接口?在Eclipse(Java)中,我将使用上下文菜单"Open Type Hierarchy"选项,它将显示一个(漂亮)类型的树,它扩展了所选类型.是否有工具在.NET中执行相同的操作?

.net class-hierarchy

12
推荐指数
2
解决办法
1万
查看次数

如何创建(32位).NET应用程序以使用3 GB RAM?

我正在创建一个需要使用大量RAM的.NET应用程序(C#).我最近知道在32位版本的Windows XP上我只能使用2 GB,除非我使用/3Gb交换机,并IMAGE_FILE_LARGE_ADDRESS_AWARE在可执行标头中设置标志.但是因为我正在开发.NET应用程序,我想我无法直接修改可执行文件,是吗?那么,我该怎么做才能让我的应用程序使用3 GB?

.net memory windows

12
推荐指数
2
解决办法
9305
查看次数