Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中的Java抽象_Java_Android_Refactoring_Abstraction_Modularity - Fatal编程技术网

Android中的Java抽象

Android中的Java抽象,java,android,refactoring,abstraction,modularity,Java,Android,Refactoring,Abstraction,Modularity,我在学习一些关于Java语言的教程。我想知道我是否应该在每次编写代码时,在任何类型的标准和堆栈上进行抽象 例如,我已经看到,对于每个Spring服务,我们甚至可以抽象控制器,使用JavaEE堆栈上的EJB接口等 我想知道这样做的目的是什么?在使用Android SDK进行开发时,我应该做同样的事情吗 我应该抽象我编写的每个类吗?当您有一个不想实现其所有方法的类时,就需要抽象。继承它的类将被迫实现所有这些方法,否则您也需要将子类声明为抽象类 除此之外,您还应该了解接口,接口的方法不能有主体,好的方

我在学习一些关于Java语言的教程。我想知道我是否应该在每次编写代码时,在任何类型的标准和堆栈上进行抽象

例如,我已经看到,对于每个Spring服务,我们甚至可以抽象控制器,使用JavaEE堆栈上的EJB接口等

我想知道这样做的目的是什么?在使用Android SDK进行开发时,我应该做同样的事情吗


我应该抽象我编写的每个类吗?

当您有一个不想实现其所有方法的类时,就需要抽象。继承它的类将被迫实现所有这些方法,否则您也需要将子类声明为抽象类

除此之外,您还应该了解接口,接口的方法不能有主体,好的方面是您的类可以实现您想要的接口。然而,您只能继承一个抽象类。接口就像合同。实现它们的任何类都需要为它们的所有方法提供主体

您是否需要抽象或接口,或者两者都需要,这实际上取决于您的设计和您想要实现的内容。虽然强制具有公共方法的类实现相同的接口(如果您不知道每个方法的主体)或抽象(如果您知道某些、所有或没有方法的主体)是一种很好的做法

另一个例子是,当您有抽象或接口时,如果您向它们添加了一些东西,那么实现它们的所有子类或类都需要遵循这些修改,这意味着可以更容易地进行修改


看看,以及。

制作模块化的、可重用的组件总是一个好主意。当一个应用程序从一开始就考虑到这一点时,它变得越来越可伸缩,越来越自我扩展。随着新功能的添加,应用程序中相同的组件可以重复使用,从而节省时间和精力。以后进行更改或确定错误来源变得更容易。重构不应该是事后的,而应该是从头开始的

话虽如此,仅仅为了“抽象”,在移动应用程序中有越来越多的抽象并不是一个好主意。当然,原因是智能手机不如服务器甚至台式电脑强大。Android应用程序中的每个类和虚拟方法都会带来性能损失。在“抽象”和效率之间需要有更大的平衡,在中低端设备上,性能权衡变得更加明显

从官方文件:

1.

2.

3.

4.

5.

编辑:


经过最近的尝试,我不得不承认第2点现在可能有点过时了。我能说什么。。。我参加匕首派对很晚。

这可以用许多不同的方式来解释。在我看来,在需要扩展或多种实现类型的情况下,抽象在编码中被用作设计原则。例如,在Spring中,一个控制器可能定义为抽象类(a),并有几个其他类型的控制器(B、C、D…)扩展a。如果您对可用的控制器实现不满意,作为Spring框架的用户,您仍然可以开发自己的控制器扩展A。此外,Spring开发人员也可以在将来的版本中轻松地扩展/添加新控制器。

可重用性。唾手可得地 如果你们班有

  • 重复代码
  • 不同场景的非重复代码
然后最好声明类抽象

将重复的代码放在抽象类中,并为不同的代码创建抽象方法

这里有一个例子

注册和注销任何广播接收器 抽象类

实现类:


如果您正在构建任何新的东西,那么根应该是接口,或者更少,您可以使用抽象类。
public abstract class BaseReceiverActivity extends AppCompatActivity{

   private BroadCastReceiver receiver;
   private IntentFilter filter;

   public abstract BroadCastReceiver getReceiver();
   public abstract IntentFilter getFilter();

   @Override
   public void onStart(){
       super.onStart();
       configureReceiver()
       registerReceiver(receiver, filter);
   }

   @Override
   public void onStop(){
       super.onPause();
       unregisterReceiver(receiver);
   }

   private void registerMyReceiver(){        
       registerReceiver(receiver, filter);    
   }

   private void configureReceiver(){
        receiver = getReceiver();
        filter   = getFilter();
   }

}
public class WifiScanner extends BaseReceiverActivity{

   @Override
   public void onCreate(Bundle sis){
        super.onCreate(sis);
        setContentView(R.layout.yourLayout);
   }

   @Override
   public BroadCastReceiver getReceiver(){
        return new YourReceiver();
   }

   @Override
   public IntentFilter getFilter(){
        return IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
   }

}