我在Play框架中编程。它在许多包中使用了许多同名的类。它使你的代码看起来很漂亮,但我遇到了一个相当讨厌的副作用:
我的控制器包中有一个“用户”类。但当然,“用户”也是一种模式。 当我在另一个控制器中编写时,我需要创建一个新的User对象。
User u = User.find(...);
因为控制器用户没有这样的方法,所以失败了。
如果解决这个问题的唯一方法就是写
,我是否正确models.users.User u = models.users.User.find(...);
在与Scala爱好者进行一些讨论后,似乎Java无法解决此类问题。或者他错了?
亲切的问候
答案 0 :(得分:3)
如果我理解你的问题是正确的,如果你这样做:
import models.users.User;
您可以在没有完整包的情况下访问该对象。这假设您不需要控制器和同一类中的模型。
如果你需要两者,那么是的,你必须完全符合(添加包)其中一个。
也就是说,将所有控制器命名为XXXXController(或类似的东西)是一个很好的约定。更一般地说,您自己的代码不应该有2个具有相同名称的不同类。原因是使代码可读性降低,因为一个地方的用户在某种程度上表现,而在另一部分代码中则表现出不同的行为。
因此,最好的解决方案是重命名控制器。
答案 1 :(得分:1)
他是对的。你没有别的办法。
它使你的代码看起来很漂亮
我不会这么说。它使我的代码变得错综复杂,难以理解。
答案 2 :(得分:1)
你是对的。如果您需要同时使用控制器中的User和同一类框架中的User类,则可以导入一个,然后使用另一个的完整包名。
这当然会让人感到困惑,我会推荐两件事之一:
1)将您的班级重命名为其他名称。 2)不要导入它们并使用两者的完整包名。这样在阅读代码时就不那么容易混淆了。
我推荐选项1。