Java 强制使用与当前包中的类同名的另一个包中的类

Java 强制使用与当前包中的类同名的另一个包中的类,java,playframework,Java,Playframework,既然你们帮了我,我在编写Java时偶然发现了一个奇怪的“问题” 我在Play框架中编程。它在许多包中使用了许多名称相同的类。它使您的代码看起来很漂亮,但我遇到了一个相当严重的副作用: 我的控制器包中有一个类“User”。当然,“用户”也是一个模型。 当我在另一个控制器中编写时,我需要创建一个新的用户对象 User u = User.find(...); 因为控制器用户没有这样的方法,所以失败了 如果解决这个问题的唯一方法是写 models.users.User u = models.users

既然你们帮了我,我在编写Java时偶然发现了一个奇怪的“问题”

我在Play框架中编程。它在许多包中使用了许多名称相同的类。它使您的代码看起来很漂亮,但我遇到了一个相当严重的副作用:

我的控制器包中有一个类“User”。当然,“用户”也是一个模型。 当我在另一个控制器中编写时,我需要创建一个新的用户对象

User u = User.find(...);
因为控制器用户没有这样的方法,所以失败了

如果解决这个问题的唯一方法是写

models.users.User u = models.users.User.find(...);
在与Scala爱好者进行了一些讨论之后,Java似乎不支持修复此类问题。还是他错了


亲切的问候他是对的。你别无选择

它使您的代码看起来很漂亮


我不会那么说。这使我的代码错综复杂,难以理解。

他是对的。你别无选择

它使您的代码看起来很漂亮


我不会那么说。这使我的代码变得错综复杂,难以理解。

如果我理解你的问题是正确的,如果你理解:

导入models.users.User

您将可以在没有完整包的情况下访问该对象。这是假设您不需要控制器和模型在同一个类中

如果您需要两者,那么是的,您必须完全限定(添加包)其中一个

也就是说,将所有控制器命名为XXXXController(或类似的名称)是一个很好的约定。更一般地说,您自己的代码不应该有两个同名的不同类。原因是这会降低代码的可读性,因为一个地方的用户的行为方式与另一个地方的用户的行为方式不同


因此,最好的解决方案是重命名您的控制器。

如果我正确理解您的问题,如果您这样做:

导入models.users.User

您将可以在没有完整包的情况下访问该对象。这是假设您不需要控制器和模型在同一个类中

如果您需要两者,那么是的,您必须完全限定(添加包)其中一个

也就是说,将所有控制器命名为XXXXController(或类似的名称)是一个很好的约定。更一般地说,您自己的代码不应该有两个同名的不同类。原因是这会降低代码的可读性,因为一个地方的用户的行为方式与另一个地方的用户的行为方式不同


因此,最好的解决方案是重命名控制器。

你是对的。如果需要在同一个类中同时使用控制器中的用户和框架中的用户类,则可以导入其中一个,然后使用另一个的完整包名

这当然会让人困惑,我想提出两件事中的一件:

1) 一个是将您的类重命名为其他类。 2) 两个都不要导入,而是使用完整的包名。这样在阅读代码时就不会那么混乱了


我推荐选项1。

您是正确的。如果需要在同一个类中同时使用控制器中的用户和框架中的用户类,则可以导入其中一个,然后使用另一个的完整包名

这当然会让人困惑,我想提出两件事中的一件:

1) 一个是将您的类重命名为其他类。 2) 两个都不要导入,而是使用完整的包名。这样在阅读代码时就不会那么混乱了


我推荐选项1。

我将向我的其他团队成员(我们正在进行一个大学项目)提出一个建议,以将此命名约定变为现实:)谢谢您的帮助!我将向我的其他团队成员(我们正在进行一个大学项目)提出一个建议,以将这个命名约定变为现实:)谢谢你的帮助!