Java 创建所有类的最大缺点是什么?不是字符串name=person.getName(),而是name=person.getName();

Java 创建所有类的最大缺点是什么?不是字符串name=person.getName(),而是name=person.getName();,java,oop,class,object,Java,Oop,Class,Object,如果我创建所有内容的类型,而不是使用字符串和基本类型,那么最大的缺点是什么 通常情况下,它看起来像: String name = person.getName(); int age = person.getAge(); 但现在“一切”都对象化了,很少处理字符串(除非需要特定的字符串操作) 其中Name和Age将是(在本例中)简单的容器类: public class Name { private final String name; public Name(final Str

如果我创建所有内容的类型,而不是使用字符串和基本类型,那么最大的缺点是什么

通常情况下,它看起来像:

String name = person.getName();
int age = person.getAge();
但现在“一切”都对象化了,很少处理字符串(除非需要特定的字符串操作)

其中
Name
Age
将是(在本例中)简单的容器类:

public class Name {

    private final String name;

    public Name(final String name) {
        this.name = name;
    }

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

}
然而,在未来,他们可以有更多的方法和验证,等等

但底线是,您基本上为所有内容创建类型

我知道这使代码更加类型安全,但这种代码约定的最大缺点是什么?

  • 这是不必要的冗长
  • 您可能会失去不变性(在本例中,
    Name
    是不可变的,但更容易出错)

如果以后需要更多字段,可以轻松添加它们。使代码尽可能简单。

唯一真正的缺点是编写的代码越多,需要维护和测试的代码就越多。理论上这是个好主意。导致问题的是实用方面。

类爆炸将使代码难以理解和理解。

当有人看到
字符串名
时,他们立即知道该对象是什么。所有java开发人员都知道
String
类。当有人看到
Name
时,他们不知道
Name
类是什么。它有什么作用?它增加了什么功能

如果这个类只扩展了
Name
而不做其他事情,那么对于开发人员来说,编写代码是毫无意义的,也是浪费时间。如果这个类确实做了其他的事情,那么您当然需要创建这个类来获得功能


一句话:如果要添加额外的功能,请创建自己的类。如果您只需要
String
中的功能,那么只需使用
String
。如果需要额外的功能,您可以随时创建
Name
并在以后重构。

代码会变得更加冗长,并且并非所有库都能同样好地处理此模式

我试图在Java代码中取得平衡,我使用了大量的原语和字符串,但一些数据类型,如货币金额和社会保险号码,有自己的专用类。SSN有其内部验证规则。货币计算得益于对舍入的明确控制,并防止以不同货币添加金额


在没有Java那么冗长的语言中,我倾向于使用比Java更多的这些专用类。

我不建议这样做,原因很简单,如果您正在与其他系统集成(例如,在组织的不同部分或第三方供应商中的web服务,您最终将不得不处理字符串和int,并且您必须使代码更加复杂,当您从其他系统获取名称时,必须将其包装在
Name
对象中,当您想将其发布到其他系统时,必须将其展开

我要说的是保持简单,使用bean验证可以很容易地引入验证


另外,如果您需要对不同对象上的
名称
使用不同的验证规则,例如,组织名称与人名不同,那么在您意识到这一点之前,您将需要处理整个类层次结构,如果您想更改名称,这将是重构的噩梦。

我曾经后悔过不为用简单字符串表示的对象创建类(例如音乐会的地点和巡演)。我这样做是为了遵循


我不记得我曾经后悔在这种情况下创建了一个类。肯定会涉及到更多的维护和锅炉板。但是,从直觉上看,如果你觉得它在未来会有回报的话(重构,甚至性能)我会说,去做吧。这是一项小投资,可以让你免于大麻烦。但尽量不要做得太多。

我认为字符串和原语概括了实现功能的愿望。将所有东西都分类会增加复杂性,因为这取决于使用或实现它的人的角度。+1用于货币计算。我见过一个应用程序将价格存储为长值,必须除以100.0,然后到处格式化。我不建议更改属性的类型。这往往会潜入各种小错误(反射、铸造等)-已经存在,修复了这个问题。如果未来有一个重构的机会,那么拥有一个专门的类是一个很好的起点。关于你的第一个论点:你多久会让新开发人员加入一个项目,以及掌握这样一个简单类的功能需要多长时间?我想说,每个新开发人员只需看一眼eloper就是这样。正如某些IDE将Javadoc显示为工具提示一样,甚至可能不需要打开该类。除非在整个项目中都这样做,否则每个新开发人员都会有无数次短暂的浏览。您必须假设新开发人员将进入该项目进行设计。业务需求要求人们改变关注点。T事情发生了。如果将来重构的机会很大,那么现在就可以开始构建类的属性,它不仅仅是一个包装器。此外,像Eclipse这样的工具使这种重构变得很容易,而不会隐藏各种小错误。有时你必须更改属性的类型。没关系,这也是很重要的比另一个更好。一个有一堆占位符用于未来代码的代码库是混乱的。当需求在未来到来之前发生变化时,占位符就会成为路障。只为未来代码编写代码要好得多
public class Name {

    private final String name;

    public Name(final String name) {
        this.name = name;
    }

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

}