Java界面最佳实践

use*_*mda 6 java interface

我有以下两种方式

public class ObjectA {
 int id ;
 String name;
}

 public class objectB {
  Long id;
  String name;
 }
Run Code Online (Sandbox Code Playgroud)

我希望能够创建一个将由这两个对象实现的接口'AnObject'.这个界面怎么样?

public interface AnObject {
  public <type?> getId() ;
  public String getName();
}
Run Code Online (Sandbox Code Playgroud)

ID的getter中的类型应该是什么?

Rob*_*ahl 18

首先,不要说出来Object.Object是Java所有其他类的隐式基类.从技术上讲,Object只要您不将其放入包中java.lang,就可以命名您的界面,但这会产生很大的误导性.

为提供不同的返回类型getId()ObjectAObjectB,使用泛型:

public interface MyObject<T> {
  T getId();
  String getName();
}

public class ObjectA implements MyObject<Integer> {
  @Override
  public Integer getId() {
    return 0;
  }

  @Override
  public String getName() {
    return "A";
  }
}

public class ObjectB implements MyObject<Long> {
  @Override
  public Long getId() {
    return 0;
  }

  @Override
  public String getName() {
    return "B";
  }
}
Run Code Online (Sandbox Code Playgroud)

如果getId()总是返回一个数字,你也可以定义MyObjectMyObject<T extends Number>.请注意,您不能使用本机类型intlong泛型; 你必须使用盒装类型IntegerLong.

  • 我们可以通过添加`public interface MyObject <T extends Number>`来改进这个解决方案,因为我们期望类型`T`是一个数字. (3认同)