java - Java 中的继承和泛型的使用

标签 java generics inheritance

我有两个接口(interface)的实现

 EncryptionService
  **ABCEncryptionServiceImpl**
     encrypt(byte[] bytes)
     decrypt(byte[] bytes)
  **XYZEncryptionServiceImpl**
     encrypt(List<String> strings)
     decrypt(List<String> strings)

我不喜欢的是我必须:

ABCEncryptionServiceImpl 中为方法提供空实现:

encrypt(List<String> strings)
decrypt(List<String> strings)

XYZEncryptionServiceImpl中为方法提供空实现:

encrypt(byte[] bytes)
decrypt(byte[] bytes)

关于如何更好地处理这个问题(即使用泛型)有什么想法吗?

最佳答案

而不是使用采用特定类型的不同方法,例如 byte[]List<String> ,您可以在 EncryptionService 中声明泛型类型参数.

public interface EncryptionService<T>
{
    public void encrypt(T obj);
    public void decrypt(T obj);
}

实现类将类型参数定义为具体类型。这样,两个实现类都不需要提供对其未涵盖的类型进行加密/解密的实现。

public class ABCEncryptionServiceImpl implements EncryptionService<byte[]>
{
    @Override
    public void encrypt(byte[] obj) { /* implementation */ }
    @Override
    public void decrypt(byte[] obj) { /* implementation */ }
}

public class XYZEncryptionServiceImpl implements EncryptionService<List<String>>
{
    @Override
    public void encrypt(List<String> obj) { /* implementation */ }
    @Override
    public void decrypt(List<String> obj) { /* implementation */ }
}

关于java - Java 中的继承和泛型的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31599611/

相关文章:

java - 接口(interface)中方法级通用返回类型

Java - 从字符串类型转换为泛型类型

generics - 是否可以在 Java 1.4 的列表中使用泛型?

Java继承,使用 builder 模式

objective-c - 父类(super class)方法放置在子类中

c++ - 纯虚拟的备用参数列表不会继承(需要 "using")

Java - 如何知道按下了什么键?

java - 从 BufferedImages 编写动画 gif

java selenium webdriver - 如何输出 javascript 对象的属性?

java - 在 Selenium 中使用命令 "driver.manage().window().setPosition(new Point(0,-1000));"后无法最大化浏览器