为了账号安全,请及时绑定邮箱和手机立即绑定

当存在不同的泛型类型时使用接口是否有意义

当存在不同的泛型类型时使用接口是否有意义

喵喵时光机 2023-10-12 20:32:39
使用接口是提供抽象的好方法,如果可能的话我通常会尝试使用它。但这次我的情况有点不同,我不确定在这里使用是否是一个好的做法。我有两个不同的类,需要一些具有相同签名的查询方法。比如说 MyString 和 MyInteger。我正在考虑用一种方法定义一个接口:public interface MyInterface{   // no type is specified for the list, because each implementation will have different type of object   List query();  }所以基本上我需要实现两个不同的类来实现上面的接口。第一个将获得List<String>,第二个将获得List<Integer>查询方法的结果。问题是我不喜欢在接口中不指定泛型类型,因为稍后我需要进行强制转换。那么在这里使用接口是否有意义,或者更好地实现两个具有相同方法签名而没有公共接口的单独类?
查看完整描述

1 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

问题是我不喜欢在界面中不指定通用类型......

这正是你解决这个问题的方式。

当我需要从列表中获取对象时,可以说 Integer x = (Integer)list.get(index); 这只是一个例子,实际上我使用用户定义的对象。

泛型的全部意义在于您不需要这样做。反而:

public interface MyInterface<T> {

    List<T> query();  

}


public class MyInteger implements MyInterface<Integer> {

    // ...

}


// ...

MyInteger foo = new MyInteger();


// ...

List<Integer> list = foo.query();


// ...

Integer i = list.get(index);

或者使用var,因为它已经出现在该语言中一段时间了:


// ...

var foo = new MyInteger();


// ...

var list = foo.query();


// ...

var i = list.get(index);

那么在这里使用接口是否有意义,或者更好地实现两个具有相同方法签名而没有公共接口的单独类?


那要看。如果您将有多个要实现的类,并且您需要以通用方式处理这些类的实例(例如,因此您用而不是类来MyInterface<Integer>引用它们)和/或如果代表整体结构的某些基本方面,那么使用接口可能是有意义的。如果不这样做,如果只是要拥有两个带有方法的不同类,则可能不会。这取决于整体设计和(有点)风格。MyInterface<Integer>MyInterfaceList<something> query


查看完整回答
反对 回复 2023-10-12
  • 1 回答
  • 0 关注
  • 75 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信