Re: Workaround to overcome the generics limitation causes by Erasure
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
yancheng.cheok@gmail.com schreef:
Initially, I thought the introduce of generics in Java would solve me
some problem in pattern design. Here, I make use of generic to design
Observer/Subject pattern.
public interface Observer<S, A> {
public void update(S subject, A arg);
}
public class Subject<S, A> {
Have you thought about why you have the S parameter here? I have the
intuition it is unnecessary: it is Subject itself right?
public void attach(Observer<S, A> observer) {
observers.add(observer);
}
void notify(S subject, A arg) {
for (Observer<S, A> obs : observers) {
obs.update(subject, arg);
}
}
private List<Observer<S, A>> observers = new
CopyOnWriteArrayList<Observer<S, A>>();
}
However, due to the limitation of generics causes by erasure, I am
unable to have two different instantiations with same generics
interface
http://angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html#Can%20a%20class%20implement%20different%20instantiations%20of%20the%20same%20parameterized%20interface?
Compiler will complain if I tend to make an Object act as more than
one type of Observer.
Of course. Imagine one extends implements List<Integer> and
List<String> at the same time. That doesn???t make sense.
public class MainFrame extends javax.swing.JFrame implements
org.yccheok.jstock.engine.Observer<RealTimeStockMonitor,
java.util.List<org.yccheok.jstock.engine.Stock>>,
org.yccheok.jstock.engine.Observer<StockHistoryMonitor,
StockHistoryServer>
Currently, my workaround for this is using
public class MainFrame extends javax.swing.JFrame implements
org.yccheok.jstock.engine.Observer<Object, Object>
and performing instanceof checking (to check whether it is
RealTimeStockMonitor or StockHistoryMonitor) during runtime.
Why don???t you just have two observers, each doing its function? You
have a method addObserver(Observer) right?
Please show some more code, i.e. not only the definition of the
interfaces/classes above, but also how you use them.
In general, every time someone complains about erasure, it is because
they have a flaw in their design.
H.
- --
Hendrik Maryns
http://tcl.sfs.uni-tuebingen.de/~hendrik/
==================
http://aouw.org
Ask smart questions, get good answers:
http://www.catb.org/~esr/faqs/smart-questions.html
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFGOKw1e+7xMGD3itQRAk+/AJ9V+JViq07wrrqT+MhUy4B14YRfEwCZAapy
YGqx4CBu4UG783kFNhvJm/4=
=EvTW
-----END PGP SIGNATURE-----