java - 接口(interface)中的泛型方法

标签 java generics

我想让接口(interface)具有通用方法,该方法从类中获取对象是一个参数,这是我的接口(interface)

public interface mDataBase<E>{

public<E extends Class> void Store(E x);

public void Search(E x);

public void Remove(E x);
}

当我尝试像该代码一样实现此方法

@Override
public <E extends Customer> void Store(E x) {
    Scanner s = new Scanner(System.in);
    try (PrintWriter pr = new PrintWriter(new FileWriter(cusFile, true))) {
        pr.println(x.getName() + "$" + x.getNumber() + "$" + x.getNID() + "$" + x.getEmail() + "$" + x.getComment() + "$" + x.getAdv());
    } catch (IOException n) {
        System.out.println("Error :I cant write File that Stores Customers Information Not Found");
        Logger.getLogger(StoreCustomer.class.getName()).log(Level.SEVERE, null, n);
    }
}

程序想要删除@Override才能工作 而顾客是另一个类(Class) 我有很多类型,我将使用相同的界面

最佳答案

您的接口(interface)声明了一个方法 public<E extends Class> void Store(E x);但你的实现类声明了一个方法 public <E extends Customer> void Store(E x) 。它们必须匹配,或者通过声明接口(interface)来匹配

public <E extends Customer> void Store(E x);

或者类声明

public<E extends Class> void Store(E x);

我猜你想要前者。

编辑: 经过评论,我想你想要的是:

public interface Database<E> {

  public void store(Class<? extends E> clazz, E x);

  public void search(E x);

  public void remove(E x);

}

还有

public class CustomerDatabase implements Database<Customer> {

  @Override
  public void store(Class<? extends Customer> clazz, Customer x) {
    ...
  }

  ...

}

虽然我不确定类(class)舞会是否必要。我就这么做

public void store(E x);

然后通过 x.getClass() 获取类(class).

关于java - 接口(interface)中的泛型方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41191317/

相关文章:

java - 在Java中创建随机颜色?

java - 使用注释映射时还需要 XML 映射吗?

java - 找到原始类型,缺少泛型类的返回参数

java - 泛型类型参数是否转换为原始类型的对象?

scala - 使用 Shapeless Polyfil 在记录上进行一般映射

java - 如何通过 JDBC 将垃圾字符插入 mysql 表

java - 获取参数化类型的 java.lang.Class<T> 对象而不构造 q_uestion 中的类?

.net - 将扩展方法应用于具有泛型类型的泛型类

ios - 如何在函数中传递任何类或结构作为参数?

java - 重载函数 int... 和 long... 同时