首页 > 解决方案 > 有没有办法在 Java 中将布尔类型赋予泛型?

问题描述

我有一个如下代码块:

public Interface ISupClass{
   void call();
   void call1();
   ...
}

public class NormalClass implements ISupClass{
   void call(){
     ....operations...
   }
   void call1(){
     ....operations...
   }
   ...
}

public class DailyClass implements ISupClass{
   void call(){
     ....operations...
   }
   void call1(){
     ....operations...
   }
   ...
}

然后我像这样从主要服务中调用它们;

实例:

private INormalClass dailyClass = new DailyClass();
private INormalClass normalClass = new NormalClass();

方法:

public void call(int type, boolean isDaily){
  if(type == 0) {
   if(isDaily){
     dailyClass.call();
   }
   else{
    normalClass.call();
   }
  }
  if(type == 1) {
   if(isDaily){
     dailyClass.call1();
   }
   else{
    normalClass.call1();
   }
  }
  ...
}

有没有办法摆脱 isDaily 签入上面的代码块?或者我怎样才能有效地实施它?我刚刚尝试使用 Java 泛型实现,但这看起来不可能?

我知道这看起来与 polimorfizm 有关。但我想知道有人会这样想;

public Interface ISupClass<E>
  call(E type)
...
public class NormalClass implements ISupClass<Boolen.FALSE>
...
public class DailyClass implements ISupClass<Boolen.TRUE>
...
public void call(int type, boolean isDaily){
   supClass.call(isDaily);

标签: javaoop

解决方案


(如果我明白问题是什么)

这就是使用接口的重点。只需执行以下操作:

public class Example {
    public static interface ISupClass {
        void doSomething();
    }

    public static class NormalClass implements ISupClass {

        @Override
        public void doSomething() {
            System.out.println("I am a normal class.");
        }

    }

    public static class DailyClass implements ISupClass {

        @Override
        public void doSomething() {
            System.out.println("I am a daily class.");
        }

    }

    public static void doSomething(ISupClass clazz) {
        clazz.doSomething();
    }

    public static void main(String[] args) {
        doSomething(new DailyClass());
        doSomething(new NormalClass());
    }
}

因此,在您的情况下,不是通过,而是在方法中boolean isDaily传递参数。ISupClasscall

public void call(int type, ISupClass caller) {
    caller.call();
}

现在,泛型是一个完全不同的故事,我无法看到它与问题的关系。


推荐阅读