我正在开发一个小项目,涉及使用相应的数据对正确的服务方法进行一些服务调用。我尝试使用以下玩具问题/解决方案解决它,但我对泛型的了解有点弱,并且它不起作用:
ArrayList<String> sampleArrayList=new ArrayList<String>();
HashSet<String> ArrayList2 = new HashSet<String>();
ArrayList2.addAll(sampleArrayList);
sampleArrayList.clear();
sampleArrayList.addAll(ArrayList2);
基本上,鉴于上述情况,我尝试将三种类型的对象发送到我的服务。他们真的不共享共同的领域(所有三个无视id)。我正在尝试执行以下操作:对于我收到的每个有效负载,将其写入服务并将其打印到控制台。最后我想得到这个:
interface Handler<T>
{
Collection<T> apply(@Nonnull User user, @Nonnull Collection<T> data);
}
private static final Map<Type, Handler> HANDLERS = ImmutableMap.<Type, Handler>builder()
.put(Type.STUDENTS, (user, data) -> Service.saveStudents(user, data))
.put(Type.TEACHERS, (user, data) -> Service.saveTeachers(user, data))
.put(Type.CLASSROOM, (user, data) -> Service.saveClassrooms(user, data))
.build();
public class Service {
Collection<Student> saveStudents(User user, Collection<Student> students);
Collection<Teacher> saveTeachers(User user, Collection<Teacher> teachers);
Collection<Classroom> saveClassRooms(User user, Collection<Classroom> classrooms);
}
class Teacher {
int id;
String firstName;
String lastName;
int salary;
...
}
class Student {
int id;
String firstName;
String lastName;
int grade;
...
}
class Classroom {
int id;
int floor;
...
}
class Payload<T> {
Type type;
Collection<T> dataToBeSaved;
}
在上面的行中,我收到有关HANDLERS.get(..)的编译器警告有原始类型,因此结果被删除。有人可以指导我一个解决方案吗?
答案 0 :(得分:0)
HANDLERS
是Handler
的集合(不是吗?)
因此,编译器无法猜测哪个泛型实现将从调用get()
返回。
您必须更改方法签名以便变量,您将结果分配给控制泛型:
interface Handler<T>
{
<R> R apply(@Nonnull User user, @Nonnull T data);
}