基于对象实例

时间:2015-10-25 11:33:57

标签: java oop

我有一个非常基本的问题,更多的是设计问题。下面列出的是用户是抽象类的类。只有 PremiumUser AdminUser 可以发布消息,而 GuestUser 无法发布消息(因此没有 postingMessages; 属性在 GuestUser 类中。

enter image description here

问题: 我有一个主要类,我称之为 postMessage();方法但在调用此方法之前,我使用另一种方法(其返回类型为用户)获取用户对象。因此,要调用 postMessage()方法,我必须将用户对象强制转换为 AdminUser PremiumUser 对象。我认为有三种方法可以做到这一点:

  1. 使用用户类中的属性 userType 进行if-else比较和基于此的类型转换。
  2. 使用java reflection获取对象的方法列表并调用 postMessage 方法。
  3. 考虑使用界面:我考虑使用将由 AdminUser PremiumUser 类实现的界面。即使在这种情况下,我也无法将用户类型的对象输入到接口类型中,并无缝地使用它来调用 postMessage();
  4. 我想知道我的设计是否在某种程度上存在缺陷,或者这是一个常见的问题,并且有一个更智能的解决方案。

2 个答案:

答案 0 :(得分:1)

为了安全施展你基本上使用类似的东西:

PremiumUser.class.isAssignableFrom(object);

也适用于从PremiumUser继承的对象(例如)。有多种选择可以避免这种检查,但这完全是设计问题。一些例子:

  • 在User类中声明postMessage()方法,并为每种类型的用户实现不同的方法。
  • 实施群组,角色和权利,并检查特定用户是否有权发布消息。

答案 1 :(得分:1)

使用其中包含postMessage方法的界面:

interface HasPostMessage {
    boolean postMessage(String message);
}

PremiumUserAdminUser实现它。然后:

if (user instanceOf HasPostMessage) {
    ((HasPostMessage) user).postMessage("The message");
}