Je suppose que vous voulez avoir une classe Supplier
et une classe Consumer
que la mise en œuvre des génériques afin que vous pourriez avoir à mettre en œuvre Supplier<Clothes>
ou Consumer<Food>
ou quelque chose d'autre dans votre classe Warehouse
?
Vous pourriez essayer quelque chose dans ce sens. C'est plus probable que je mette en place une usine de génériques.
public class Supplier<T>{
//You might decide you need an actual constructor that does something
public Supplier(){}
public T supplyItem(){
return new T();
}
}
consommateurs pourrait ressembler ...
public class Consumer<T>{
private int consumeCount = 0;
//You might decide you need an actual constructor that does something
public Consumer(){}
public void consumeItem(T item){
consumeCount++;
}
public int consumeCount(){
return consumeCount;
}
}
Et enfin, votre entrepôt pourrait inclure quelque chose comme ...
Supplier<Integer> integerSupplier = new Supplier<Integer>();
Consumer<Integer> integerConsumer = new Consumer<Integer>();
Integer i = integerSuppler.supplyItem();
integerConsumer.consumeItem(i);
integerConsumer.consumeItem(integerSupplier.supplyItem());
System.out.println(integerConsumer.consumeCount());
Ce qui nous attendrions à imprimer "2" . Vous pouvez également modifier vos méthodes de consommation pour prendre une instance de Object
au lieu de T
et utiliser instanceOf
pour traiter ou dire "Impossible de consommer cela, pas mon truc". Cependant, il y a certaines choses que vous devriez faire attention avec instanceOf
, donc s'il n'est pas nécessaire d'être aussi robuste, je ne m'inquiéterais pas. http://www.javapractices.com/topic/TopicAction.do?Id=31 a une bonne explication de pourquoi.
EDIT: Il peut sembler que le Consommateur et le Fournisseur interagissent entre eux, notamment lorsque vous avez une ligne comme integerConsumer.consumeItem(integerSupplier.supplyItem());
, mais il est important de noter que le Consommateur et le Fournisseur n'interagissent pas réellement entre eux. le fournisseur génère simplement un nouvel objet, et le consommateur le prend comme argument. Bien que Warehouse connaisse l'existence du consommateur et du fournisseur, le consommateur ne connaît pas l'existence du fournisseur et vice versa.
pour moi, c'est un peu difficile à dire sans un exemple concret de ce que le programme est censé faire. Intuitivement, je dirais que vous n'avez même pas besoin d'interfaces ou de génériques car les différences entre les objets peuvent être suffisamment caractérisées par des propriétés. – Nicolas78
Je voulais mettre en œuvre en utilisant Generics et le programme devrait expliquer comment l'entrepôt de travail avec plusieurs fournisseurs et consommateurs et différents types d'étoffes, c'est la base du fonctionnement normal de l'entrepôt, le client et les fournisseurs dans la vie réelle. – Rachel
Quels sont les cas d'utilisation décrivant les interactions entre eux? – Paolo