У меня есть сценарий, где есть компонент с объектом будущего (класс А ниже). У меня есть другой класс (класс B ниже), который является одиночным и имеет HashMap в качестве переменной экземпляра типа и реализует интерфейс (TestInterface ниже), который снова реализует Callable.
Согласно текущему сценарию, пользователь может передать только Future типа Object, но в соответствии с моими новыми требованиями я хочу Future Object of Generic Type. Я изменил код, который, кажется, работает, но есть много предупреждений, и я не уверен, верны ли мои изменения. Есть несколько сценариев, для которых я уверен, что код потерпит неудачу. Основная проблема, с которой я сталкиваюсь, заключается в инициализации HashMap GenericType в пределах одноэлементного класса. Кто-нибудь может мне помочь с этим?
Приведенный ниже код является примером существующего кода.
Интерфейс тестирования интерфейса:
interface TestInterface extends Callable<Void>{
void doSomething(Future<Object> future, String id);
}
Класс A
class A{
private Future<Object> future;
private CustomInteraface a;
public A(Future<Object> future, CustomInteraface a){
//do init
}
//getters and setters
}
Класс B
Class B implements TestInterface{
private HashMap<String, A> map = new HashMap();
private static B monitor = new B();
public Void call(){
HashMap.Entry<String, A> pair = (HashMap.Entry<String, A>) it.next();
A a = (A) pair.getValue();
Future<Object> future = a.getFuture();
// Do something
}
public void doSomething(Future<Object> future, String id){
if(map.contains(id)){
//Do something
}
else{
A a = new A(future, null);
map.put();
}
}
}
Изменения, внесенные в Genrics
Интерфейс тестирования интерфейса:
interface TestInterface extends Callable<Void>{
<T> void doSomething(Future<T> future, String id);
}
Класс A
class A<T>{
private Future<T> future;
private CustomInteraface a;
public A(Future<T> future, CustomInteraface a){
//do init
}
//getters and setters
}
Класс B
Class B implements TestInterface{
private HashMap<String, A> map = new HashMap();
private static B monitor = new B();
public Void call(){
HashMap.Entry<String, A> pair = (HashMap.Entry<String, A>) it.next();
A a = (A) pair.getValue();
//Code will definitely fail here as I'm trying to cast a future object of generic type to Object class
Future<Object> future = a.getFuture();
// Do something
}
public void doSomething(Future<T> future, String id){
if(map.contains(id)){
//Do something
}
else{
A<T> a = new A<T>(future, null);
map.put();
}
}
}