小编Mik*_*kis的帖子

为什么Hibernate不需要参数构造函数?

无参数构造函数是一个要求(像Hibernate这样的工具在这个构造函数上使用反射来实例化对象).

我得到了这个手作波形的答案,但有人可以进一步解释吗?谢谢

java orm hibernate factory-pattern

92
推荐指数
6
解决办法
8万
查看次数

如何将对象传递给属性构造函数

我试图将对象传递给Attributes构造函数,如下所示:

[PropertyValidation(new NullOrEmptyValidatorScheme())]
public string Name { get; private set; }
Run Code Online (Sandbox Code Playgroud)

使用此属性构造函数:

 public PropertyValidationAttribute(IValidatorScheme validator) {
      this._ValidatorScheme = validator;
    }
Run Code Online (Sandbox Code Playgroud)

代码不会编译.如何将对象传递给上面的属性?

编辑:是NullOrEmptyValidatorScheme实现IValidatorScheme.

错误:错误CS0182:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式.

c# attributes

55
推荐指数
3
解决办法
5万
查看次数

为什么String中的equals方法不使用哈希?

equalsString类中方法的代码是

public boolean equals(Object anObject) {
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
            char v1[] = value;
            char v2[] = anotherString.value;
            int i = offset;
            int j = anotherString.offset;
            while (n-- != 0) {
                if (v1[i++] != v2[j++])
                    return false;
            }
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我有一个问题 - 为什么这个方法不使用hashCode()?

据我所知,hashCode()可以快速比较两个字符串.

更新:我知道,两个不相等的字符串,可以有相同的哈希值.但两个相等的字符串具有相等的哈希值.因此,通过使用hashCode(),我们可以立即看到两个字符串是不相等的.

我只是想,使用hashCode()方法可以很好的过滤器equals.

更新2:这里有一些代码,我们在这里谈论.

这是String方法等于的示例 …

java string hashcode

44
推荐指数
3
解决办法
4633
查看次数

减少构造函数的参数数量

我正在阅读"清洁代码",并且无法弄清楚如何将我的一些功能(通常是构造函数)保持为最多3个参数.

通常我的对象需要大量的信息才能工作 - 我是否应该创建一个小构造函数,然后使用mutator函数为它们提供所有信息?这似乎没有比使用一个大的构造函数更好.

举个例子,我有一个"MovablePatch"类.它允许用户在窗口中拖动方块.它需要几个参数,包括Radius,Color,Renderer,InitialPosition和Visibility.目前我从我的GUI收集所有这些,然后调用:

MovablePatch(int radius, Renderer* renderer, Color color,  Position initial, bool visibility)
Run Code Online (Sandbox Code Playgroud)

这些只是我在这堂课中需要的一些东西.任何人都可以建议我如何打包这些信息传递给构造函数?我没有看到任何明显的"打破小班"在这里出现.

language-agnostic oop design-patterns

42
推荐指数
5
解决办法
4692
查看次数

c ++头文件相互包含在一起

我有两个类都在单独的头文件中定义.每个文件都有一个其他类的字段.现在我在每个文件的头文件中包含了其他文件的头文件,但是编译器正在生成错误.我错过了什么?

c++ header include

41
推荐指数
3
解决办法
4万
查看次数

在C#中,为什么"int"是System.Int32的别名?

由于C#支持Int8,Int16,Int32Int64,为什么语言的设计者选择定义int的别名,Int32而不是允许其根据是什么原生架构认为是一个变化的word

我没有特别需要int表现出不同于它的方式,我只是要求纯粹的百科全书兴趣.

我认为,一个64位RISC架构可以想见,存在这将最有效地只支持64位的数量,并在其中的32位数量操作将需要额外的操作.在程序坚持使用32位整数的世界中,这样的架构将处于不利地位,这是另一种说C#成为未来语言的方式,这实际上阻止了硬件设计者提出这样的问题.未来的建筑.

StackOverflow不鼓励推测答案,所以请仅在您的信息来自可靠来源时回答.我注意到SO的一些成员是微软内部人士,所以我希望他们能够在这个问题上启发我们.

注1:我确实阅读了所有答案和SO的所有注释:假设int在C#中总是32位是否安全?但是没有找到关于我在这个问题上提出的原因的任何暗示.

注2:这个问题的可行性上也是如此(不了了之了)这里讨论:元:我能问一个"为什么他们做这种方式"类型的问题?

c# alias types language-design

40
推荐指数
2
解决办法
3625
查看次数

仅在特定类型上允许自定义属性

有没有办法强制编译器限制自定义属性的使用仅用于特定属性类型,如int,short,string(所有基本类型)?
类似于AttributeUsageAttribute的ValidOn- AttributeTargets枚举.

.net c# compiler-construction attributes

33
推荐指数
3
解决办法
2万
查看次数

Java泛型和varargs

我想用泛型和varargs实现一个函数.

public class Question {
    public static <A> void doNastyThingsToClasses(Class<A> parent, Class<? extends A>... classes) {
        /*** something here ***/
    }
    public static class NotQuestion {
    }
    public static class SomeQuestion extends Question {
    }
    public static void main(String[] args) {
        doNastyThingsToClasses(Object.class, Question.class, SomeQuestion.class); // OK
        doNastyThingsToClasses(Question.class, SomeQuestion.class); // OK
        doNastyThingsToClasses(Question.class, Object.class, SomeQuestion.class); // compilation failure
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的目的是断言传递给该函数的所有参数都是Class对象,扩展了作为第一个参数给出的Class.因此,main方法的两个第一行将编译,第三行将生成错误.

我的问题是:为什么我得到"类型安全:为varargs参数创建类的通用数组"消息前两行?

我在这里错过了什么吗?

附加问题:如何重新设计它以防止在每行调用"doNastyThingsToClasses"函数时显示此警告?我可以将其更改为"doNastyThingsToClasses(Class <A> parent,Class <?> ... classes)"并删除警告,但这也会删除编译时类型检查 - 如果我想要的话,那就太好了确保正确使用此功能.更好的解决方案?

java generics types variadic-functions

32
推荐指数
4
解决办法
3万
查看次数

java:获取数组组件的类

如果我有

public <T> doSomething(T[] array)
{
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能T.classarray

如果我这样做array.getClass(),那就T[].class取而代之.

java arrays generics

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

属性和命名/可选构造函数参数不起作用

我有自定义属性,如下所示:

  [AttributeUsage(AttributeTargets.Field)]
  public class EnumDisplayAttribute : Attribute
  {
    public string Description { get; private set; }
    public string Code { get; private set; }

    public EnumDisplayAttribute(string description = null, string code = null)
    {
      Description = description;
      Code = code;
    }
  }
Run Code Online (Sandbox Code Playgroud)

两个构造函数参数都是可选的.

在像这样的字段上使用此属性时

  public enum TransactionType
  {
    [EnumDisplay(code: "B")] 
    Bill,
    [EnumDisplay(description: null, code: "C")]
    CashReceipt,
  }
Run Code Online (Sandbox Code Playgroud)

我没有在代码编辑器中看到任何波形,但我看到一个模糊的错误,没有任何文件行号列.错误消息是:

错误CS0182:属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

单击该错误不会执行任何操作.也就是说,您不会导航到错误站点(显然,因为没有行号和列).

即使我像这样设置属性:

[EnumDisplay("This is a Bill")] 
Run Code Online (Sandbox Code Playgroud)

编译器不喜欢它.

实际上,我被迫提供两个参数(已命名或未命名),以便将此属性用作属性.

当然,如果我将此属性用作常规类,如下所示:

var enumDisplayAttribute = new EnumDisplayAttribute();
enumDisplayAttribute = new EnumDisplayAttribute(description: "This is a …
Run Code Online (Sandbox Code Playgroud)

c# custom-attributes

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