Java中的继承和使用泛型

时间:2015-07-23 23:14:51

标签: java generics inheritance

我有两个接口实现

 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)

有关如何以更好的方式处理此问题的任何想法,例如使用泛型?

4 个答案:

答案 0 :(得分:1)

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

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

实现类将type参数定义为具体类型。这样,实现类都不需要提供加密/解密它没有覆盖的类型的实现。

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 */ }
}

答案 1 :(得分:1)

您可以向EncryptionService添加泛型类型参数:

abstract class EncryptionService<T> {
    public abstract void encrypt(T item);
    public abstract void decrypt(T item);
}

然后,您可以在扩展EncryptionService时将其用作类型参数来指定要加密/解密的数据:

class ABCEncryptionServiceImpl extends EncryptionService<byte[]> {
    public void encrypt(byte[] bytes) {

    }

    public void decrypt(byte[] bytes) {

    }
}

class XYZEncryptionServiceImpl extends EncryptionService<List<String>> {
    public void encrypt(List<String> items) {

    }

   public void decrypt(List<String> items) {

   }
}

答案 2 :(得分:0)

难道不是那么简单吗?如果我错过了你的问题,请告诉我。

public interface EncryptionService<INPUT, OUTPUT> {
     OUTPUT encrypt(INPUT input);
     INTPUT decrypt(OUTPUT output);
}

public class ABCEncryptionServiceImpl extends EncryptionService<List<String>, List<String>> {
     ...
}

public class XYZEncryptionServiceImpl extends EncryptionService<byte[], byte[]> {
     ...
}

答案 3 :(得分:0)

如果我说得对,你想制作加密和解密泛型的参数。

天真的解决方案是

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

然后你的实现就像

public class ABCEncryptionService implements EncryptionService<byte[]> {
    void encrypt(byte[] data){} 
    void decrypt(byte[] data){}
}

public class XYZEncryptionService implements EncryptionService<List<String>> {
    void encrypt(List<String> data){}
    void decrypt(List<String> data){}
}