我有两个接口实现
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)
有关如何以更好的方式处理此问题的任何想法,例如使用泛型?
答案 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){}
}