目前我有这个设置:
public abstract class Manager<B extends Bean, C extends AbstractConstraint> {
public final int insert(B b);
public final boolean update(B b);
public final boolean delete(B b);
public final B get(C... c);
public final List<B> search(C... c);
public final List<B> getAll();
}
public interface Bean { }
public abstract class AbstractConstraint { }
具体用于:
public class AccountManager extends Manager<AccountBean, AccountConstraint> { }
public class AccountBean implements Bean { }
public class AccountConstraint extends AbstractConstraint { }
几点说明:
Bean
是可能的最低实体。这是数据库中表中行的直接实例。- 的具体实现不
AbstractConstraint
应该实现/扩展 的具体实现Bean
,除非我在这里弄错了。
通过Manager
我可以确定,您可以传入的只是一个具体版本的<Bean, AbstractConstraint>
.
然而,目前定义这个是完全有效的:
public class BogusManager extends Manager<AccountBean, CharacterConstraint> { }
这根本没有意义,我该如何限制代码以使其不再被允许?
我认为我有两个选择:
1)更改AccountConstraint
为AccountConstraint<AccountBean>
,但我不认为它是有效的,因为类型参数AccountConstraint
本身不会被使用。
2)有一种方法来定义一个关系R
并让Manager
检查是否<B, C>
有关系R
,换句话说,你需要检查R(B, C)
。但是你还需要能够定义一个关系R<AccountBean, AccountConstraint>
,这意味着R = Manager
,但我不认为这可能是真的。无论如何,如果这是真的,我将如何实现这一点?
问候。