Java返回类型为Void和Object(更像是可选)

时间:2016-07-21 17:31:40

标签: java optional

我想知道是否有办法用void或Object实现接口方法?

例如......

  

接口

public interface MyInterface {
     public XXXXXXX myMethod();
}

  

实施类1

public class MyClassOne implements MyInterface {
    public void myMethod() {
        System.out.println("MyClassOne");
    }
}
  

实施类2

public class MyClassTwo implements MyInterface {
     public String myMethod() {
         System.out.println("MyClassTwo");
         return "MyClassTwo";
     }
}

3 个答案:

答案 0 :(得分:1)

MyInterface<T>案例可以使用voidVoid type

public interface MyInterface<T> {
    T myMethod();
}

public class MyClassOne implements MyInterface<Void> {
    @Override
    public Void myMethod() {
        System.out.println("MyClassOne");
        return null;
    }
}

public class MyClassTwo implements MyInterface<String> {
     @Override
     public String myMethod() {
         System.out.println("MyClassTwo");
         return "MyClassTwo";
     }
}

答案 1 :(得分:0)

Void类是一个不可实例化的占位符类,用于保存对表示Java关键字void的Class对象的引用。

答案 2 :(得分:0)

一般来说,我认为你尝试做的并不是一个好主意,因为有了它,你不能编程为接口,因为根据你期望的结果或没有。 使用带有Void的参数化类型可以显示问题。

实际上,您无法根据或多或少精确的类型进行类型化返回。 您在返回中处理Object类型的实例。

例如:

MyInterface myInterface = new MyClassOne();
Object myMethod = myInterface.myMethod();

所以,你必须做instanceof或getClass来猜测该做什么...... 你不再做OOP了。 界面失去了力量。

如果您需要一个带有返回的方法而另一个没有返回的方法,请创建两个方法。如果要使用单个方法,可以保持最宽泛(哪一个具有返回类型),当您没有要返回的信息时,返回null或特殊值。

方法必须有明确的责任。