我有一个有2个通用参数的接口。但有时需要抽象方法只接受1个通用参数。我怎样才能做到这一点?我看到它的方式我不能使泛型可选,如果我在界面内编写一个重载方法,它将在一些不需要的java类(将实现该接口)中不必要地实现。现在我传递参数化,在实现接口时也在类头中需要两次,并且在函数内部,因为我强制性地必须传递2个参数。我被卡住了。任何方向?
public interface ITaskPermissionHandler<T, V> {
String getType();
boolean hasPermission(T clazz, UserRef user, String type, V clazz1);
}
public class CreateTaskPermission implements ITaskPermissionHandler<Task,Task> {
@Override
public String getType() {
return TaskConstants.CREATE_TASK;
}
@Override
public boolean hasPermission(Task task, UserRef user, String type, Task task1) {
return type.equalsIgnoreCase(TaskConstants.CREATE_TASK);
}
}
答案 0 :(得分:2)
您的方法需要4个参数。你不能突然让它花费3。
如果你想要一个带有3个参数的方法,那么它是一个不同的方法(重载),你需要一个与该方法不同的接口。
然而,您可以执行java.util.function
接口的操作,并使用更简单的版本扩展界面,例如BinaryOperator<T>
扩展BiFunction<T,T,T>
的方式。
像其中一种方式:
interface ISimplePermissionHandler<T> extends ITaskPermissionHandler<T, T> {
default boolean hasPermission(T clazz, UserRef user, String type) {
return hasPermission(clazz, user, type, clazz);
}
}
class CreateTaskPermission implements ISimplePermissionHandler<Task> {
@Override
public String getType() {
return TaskConstants.CREATE_TASK;
}
@Override
public boolean hasPermission(Task task, UserRef user, String type, Task task1) {
return type.equalsIgnoreCase(TaskConstants.CREATE_TASK);
}
}
interface ISimplePermissionHandler<T> extends ITaskPermissionHandler<T, T> {
@Override
default boolean hasPermission(T clazz, UserRef user, String type, T clazz1) {
return hasPermission(clazz, user, type);
}
boolean hasPermission(T clazz, UserRef user, String type);
}
class CreateTaskPermission implements ISimplePermissionHandler<Task> {
@Override
public String getType() {
return TaskConstants.CREATE_TASK;
}
@Override
public boolean hasPermission(Task task, UserRef user, String type) {
return type.equalsIgnoreCase(TaskConstants.CREATE_TASK);
}
}