java打印接口的ArrayList。

huangapple go评论116阅读模式
英文:

java print arraylist of interface

问题

  1. // Creates an ArrayList to hold all observers
  2. observers = new ArrayList<Observer>();
  3. // ...
  4. public void notifyObserver() {
  5. for(Observer observer : observers){
  6. observer.updateViaObserver(ibmPrice, aaplPrice, googPrice);
  7. }
  8. }
  1. // Doesn't work
  2. toString();
  1. // Called to update all observers
  2. public void updateViaObserver(double ibmPrice, double aaplPrice, double googPrice) {
  3. this.ibmPrice = ibmPrice;
  4. this.aaplPrice = aaplPrice;
  5. this.googPrice = googPrice;
  6. // this works
  7. printThePrices();
  8. // doesn't work
  9. toString();
  10. }
  1. // Accessing the ArrayList elements inside notifyObserver method
  2. System.out.println(observers.get(0));
英文:

I'm learning observer design pattern from one of youtube videos and want to understand a bit more the behavior of interface arraylist, I think I quite understand how it works but when it comes the interface arraylist, its confusing to me how to access the value inside loop.

the subject and observer interfaces as follow;

  1. public interface Subject {
  2. public void register(Observer o);
  3. public void unregister(Observer o);
  4. public void notifyObserver();
  5. }
  1. public interface Observer {
  2. public void updateViaObserver(double ibmPrice, double aaplPrice, double googPrice);
  3. }
  1. package observer_pattern;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. public class StockGrabber implements Subject{
  5. private ArrayList&lt;Observer&gt; observers;
  6. private double ibmPrice;
  7. private double aaplPrice;
  8. private double googPrice;
  9. public StockGrabber(){
  10. // Creates an ArrayList to hold all observers
  11. observers = new ArrayList&lt;Observer&gt;();
  12. }
  13. public void register(Observer newObserver) {
  14. observers.add(newObserver);
  15. }
  16. public void notifyObserver() {
  17. for(Observer observer : observers){
  18. observer.updateViaObserver(ibmPrice, aaplPrice, googPrice);
  19. }
  20. }
  21. public void setPrice(double newIBMPrice, double newAAPLPrice, double newGOOGPrice){
  22. this.ibmPrice = newIBMPrice;
  23. this.aaplPrice = newAAPLPrice;
  24. this.googPrice = newGOOGPrice;
  25. notifyObserver();
  26. }
  27. }
  1. package observer_pattern;
  2. public class StockObserver implements Observer {
  3. private double ibmPrice;
  4. private double aaplPrice;
  5. private double googPrice;
  6. private Subject stockGrabber;
  7. public StockObserver(Subject stockGrabber){
  8. this.stockGrabber = stockGrabber;
  9. this.observerID = ++observerIDTracker;
  10. stockGrabber.register(this);
  11. }
  12. // Called to update all observers
  13. public void updateViaObserver(double ibmPrice, double aaplPrice, double googPrice) {
  14. this.ibmPrice = ibmPrice;
  15. this.aaplPrice = aaplPrice;
  16. this.googPrice = googPrice;
  17. // this works
  18. printThePrices();
  19. // doesn&#39;t work
  20. toString();
  21. }
  22. public void printThePrices(){
  23. System.out.println(observerID + &quot;\nIBM: &quot; + ibmPrice + &quot;\nAAPL: &quot; +
  24. aaplPrice + &quot;\nGOOG: &quot; + googPrice + &quot;\n&quot;);
  25. }
  26. public String toString() {
  27. return &quot;StockObserver: ibmPrice=&quot; + ibmPrice + &quot; aaplPrice=&quot; + aaplPrice;
  28. }
  29. }

MAIN

  1. package observer_pattern;
  2. public class GrabStocks{
  3. public static void main(String[] args){
  4. StockGrabber stockGrabber = new StockGrabber();
  5. StockObserver observer1 = new StockObserver(stockGrabber);
  6. stockGrabber.setIBMPrice(197.00);
  7. stockGrabber.setAAPLPrice(677.60);
  8. stockGrabber.setGOOGPrice(676.40);
  9. observer1.toString();
  10. }
  11. }

How to access value for my ArrayList&lt;Observer&gt; observers inside "notifyObserver" method? if I do this System.out.println(observers.get(0)); I get observer_pattern.StockObserver@446cdf90

答案1

得分: 0

  1. 如何在 "notifyObserver" 方法内部访问我的 ArrayList<Observer> observers 的值?
  2. 你已经在做了。
  3. public void notifyObserver() {
  4. for (Observer observer : observers) {
  5. observer.updateViaObserver(ibmPrice, aaplPrice, googPrice);
  6. }
  7. }
  8. 如果我执行 System.out.println(observers.get(0));,我会得到 observer_pattern.StockObserver@446cdf90
  9. 这是因为你的 `StockObserver` 类没有一个返回对象的可读表示的 `toString` 方法。可以像这样做:
  10. public String toString() {
  11. return "StockObserver: ibmPrice=" + ibmPrice + " aaplPrice=" + aaplPrice;
  12. }
英文:

> How to access value for my ArrayList<Observer> observers inside "notifyObserver" method?

You're already doing it.

  1. public void notifyObserver() {
  2. for(Observer observer : observers){
  3. observer.updateViaObserver(ibmPrice, aaplPrice, googPrice);
  4. }
  5. }

> if I do this System.out.println(observers.get(0)); I get observer_pattern.StockObserver@446cdf90

That's because your StockObserver class does not have a toString method that returns a human readable representation of the object. Something like this

  1. public String toString() {
  2. return &quot;StockObserver: ibmPrice=&quot; + ibmPrice + &quot; aaplPrice=&quot; + aaplPrice;
  3. }
  4. </details>

huangapple
  • 本文由 发表于 2020年4月6日 23:00:04
  • 转载请务必保留本文链接:https://go.coder-hub.com/61062706.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定