如何满足这种需求?一般性?继承?

发布于 2025-02-06 06:05:21 字数 3791 浏览 2 评论 0原文

Sensormanager聆听了许多传感器(GPS/温度/亮度)。

class Sensor{

 public Sensor getInstance(){
  
 }
 public register(int id,Listener listener){
 }
 public unRegister(Listener listener){
 }
 
 public interface Listener{
  void onDataChange(int id, int value);
 }

}

我想使用不同的小部件显示不同的传感器。 这样:

    abstract class View1 extends TextView{
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }




    abstract class View2 extends Button{
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }



  abstract class View3 extends ImageView{
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }


 abstract class View4 extends LinearLayout {
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }



 abstract class View5 extends RelativeLayout{
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }

问题太多了。 我发现了一个

abstract AbsView<T extends View> extends T{
     abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }

  }

class View1 extends AbsView<TextView>{
      int getSensorId(){
        return gpsId;
      }

     void onValueChange(int value){
        setText("xxxx");
     }
}

class View2 extends AbsView<ImageView>{
      int getSensorId(){
        return gpsId;
      }

     void onValueChange(int value){
        setImage(xxx);
     }
}

class View3 extends AbsView<LinearLayout>{
      int getSensorId(){
        return gpsId;
      }

     void onValueChange(int value){
        addView(xxx);
     }
}

溶剂 那么,还有更多优雅的方法可以完成吗?

there are many sensors(gps/temperature/brightness) listened by SensorManager.

class Sensor{

 public Sensor getInstance(){
  
 }
 public register(int id,Listener listener){
 }
 public unRegister(Listener listener){
 }
 
 public interface Listener{
  void onDataChange(int id, int value);
 }

}

I want to use different widgets to display different sensors.
like this:

    abstract class View1 extends TextView{
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }




    abstract class View2 extends Button{
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }



  abstract class View3 extends ImageView{
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }


 abstract class View4 extends LinearLayout {
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }



 abstract class View5 extends RelativeLayout{
      abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }
    
   }

The problem is too many widget.
I figured out a solvent.(which failed to compile)

abstract AbsView<T extends View> extends T{
     abstract int getSensorId();
      abstract void onValueChange(int value);
      public void onAttachToWindow(){
        Sensor.getInstance.register(id,listener);
      }
    
      public void onDetachFromWindow() {
         Sensor.getInstance.unRegister(listener);
      }
      listener = new Listener(){
          void onDataChange(int id, int value){
             onValueChange(value);
          }
      }

  }

expecting i can use it like this

class View1 extends AbsView<TextView>{
      int getSensorId(){
        return gpsId;
      }

     void onValueChange(int value){
        setText("xxxx");
     }
}

class View2 extends AbsView<ImageView>{
      int getSensorId(){
        return gpsId;
      }

     void onValueChange(int value){
        setImage(xxx);
     }
}

class View3 extends AbsView<LinearLayout>{
      int getSensorId(){
        return gpsId;
      }

     void onValueChange(int value){
        addView(xxx);
     }
}

Them the compiler told me I can't do this.
So,is there any more elegant ways to accomplish it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文