向下兼容_向下兼容性格什么意思 - CSDN
精华内容
参与话题
  • 简要辨析向下兼容、向上兼容、向前兼容、向后兼容四个概念之间的关联与联系。简言之,向上兼容等同于作向前兼容,向下兼容等同于向后兼容。主流使用的是向前兼容和向后兼容。向后兼容中“后”指“落后”,站在新版本...

    摘要:

    简要辨析向下兼容、向上兼容、向前兼容、向后兼容四个概念之间的关联与联系。简言之,向上兼容等同于作向前兼容,向下兼容等同于向后兼容。主流使用的是向前兼容和向后兼容。向后兼容中“后”指“落后”,站在新版本的立场讨论过去版本的兼容性问题。向前兼容中“前”指“前进”,表示未来的事情,站在旧版本的立场讨论未来版本的兼容性问题。

    正文:

    向后兼容(Backward compatibility)

            Backward compatibility is the capability of interoperating with older systems. In telecommunications and computing, a product or technology is backward or downward compatible if it can work with input generated by an older product or technology. If products designed for the new standard can receive, read, view or play older standards or formats, then the product is said to be backward-compatible; examples of such a standard include data formats and communication protocols. The reverse is forward compatibility, which implies that old devices allow data formats generated by new devices, perhaps without supporting all new features. A standard supports forward compatibility if older product versions can receive, read, view, or play the new standard. For example, the introduction of FM stereo transmission allowed backward compatibility since new FM radio receivers could receive monaural signals generated by old transmitters. It also allowed forward compatibility, since old monaural FM radio receivers could still receive a signal from a new transmitter. In programming languages, backward compatibility refers to the ability of a compiler for version N of the language to accept programs or data that worked under version N - 1. By this definition, if previous versions were also backward compatible, which is often the case, then, by induction, version N will also accept input that worked under any prior version after, and including, the latest one that was not backward compatible. However, in practice, features are often deprecated and support is dropped in a later release, which is yet thought of as backward compatible.
            Backward compatibility is important because it eliminates the need to start over when you upgrade to a newer product. A backward-compatible word processor, for instance, allows you to edit documents created with a previous version of the program. In general, manufacturers try to keep all their products backward compatible. Sometimes, however, it is necessary to sacrifice backward compatibility to take advantage of a new technology.
            The flip side of backward compatibility is upward compatibility. Upward compatible is the same as backward compatible, except that it is from the point of view of the older model.
    向前兼容(Forward compatibility)
            Forward compatibility is the capability of interoperating with anticipated future systems. Forward compatibility aims at the ability of a design to gracefully accept input intended for later versions of itself. The concept can be applied to entire systems, electrical interfaces, telecommunication signals, data communication protocols, file formats, and computer programming languages. A standard supports forward compatibility if older product versions can receive, read, view, play or execute the new standard. The applicability of a forward compatible system with new versions requires not only the respecting of the older version by the designers of the newer version but additionally some agreement on future design features with the design freeze of current versions. The introduction of a forward compatible technology implies that old devices partly can understand data generated by new devices. 
    forward compatibility and extensibility:
            Although the concepts of forward compatibility and extensibility are similar, they are not the same. A forward compatible design can accept data from a future version of itself and pick out the "known" part of the data. An example is a text-only word processor ignoring picture data from a future version. An extensible design is one that can be upgraded to fully handle the new data in the newer input format. An example is a text-only word processor that can be upgraded to handle picture data.
            Forward compatibility is a design principle in which a program or piece of hardware is developed to remain functional in the future with new software or devices. For example, a computer program is typically written in code that allows it to work with an Operating System (OS) and hardware that is current at the time of its release. A developer creating a program with forward compatibility in mind tries to ensure that it will also be able to function several years later with a new OS and different hardware. This can be quite difficult to ensure, however, though certain methods can be used to make the process simpler.
    总结:
            向后兼容中“后”指“落后”,而不是“后来”,表示过去的事情,站在新版本的立场讨论过去版本的兼容性问题。向前兼容中“前”指“前进”,而不是“以前”,表示未来的事情,站在旧版本的立场讨论未来版本的兼容性问题。
            微软网站对“向后兼容”和“向前兼容”的理解:
          (1)向后兼容。2007 Microsoft Office 系统向后兼容下列早期版本:Microsoft Office 2000、Microsoft Office XP 和 Microsoft Office 2003。这些版本的用户可以轻松地采用新的格式,并继续从现有文件中获得最大的益处。特别是他们还可以继续使用旧的 .doc、.xls 和 .ppt 二进制格式,这些格式与 2007 文件格式完全兼容。
          (2)向前兼容。应用程序的早期版本能够打开较新版本中的文件并忽略早期版本中未实现的功能。例如,Word 2003 向前兼容 Word 2007,因为它能够成功地使用转换器打开 Word 2007 文件。

    向上兼容(Upward Compatible)
    向上兼容(Upward Compatible),又称作向前兼容(Foreward Compatibility)。在计算机中指在较低档计算机上编写的程序,可以在同一系列的较高档计算机上运行,或者在某一平台的较低版本环境中编写的程序可以在较高版本的环境中运行,都称为向上兼容,前者是硬件兼容,而后者是软件兼容。例如,基于Intel386的PC兼容机上所有的软件也可以运行在486或更高的机型上。向上兼容具有非常重要的意义,一些大型软件的开发,工作量极大,如这些软件都能做到兼容,则无需在其它机器上重新开发,就可节省庞大的人力和物力。

    向下兼容(Downward Compatible)
    向下兼容(Downward Compatibility),又称作向后兼容(Backward Compatibility)。在计算机中指在一个程序或者类库更新到较新的版本后,旧的版本程序创建的文档或系统仍能被正常操作或使用,或在旧版本的类库的基础上开发的程序仍能正常编译运行的情况。例如较高档的计算机或较高版本的软件平台可以运行较为低档计算机或早期的软件平台所开发的程序,如基于Pentium微处理器的PC兼容机可以运行早期在486上运行的全部软件。向下兼容可以使用户在进行软件或硬件升级时,厂商不必为新设备或新平台从头开始编制应用程序,以前的程序在新的环境中任然有效。
    对于软件来说,向下兼容的意思是,较高版本的程序能顺利处理较低版本程序的数据。拿著名的动画制作软件 Flash的两个版本 Flash 5(老版本)与 Flash MX 2004(新版本)来说,这两个版本虽然保存出来的文件都是 .fla,可是文件内容的结构有所不同。尽管如此,Flash MX 2004 仍然能处理 Flash 5 保存的 fla 文件,我们就说 Flash MX 2004 是向下兼容的。而Flash 5不能处理Flash MX 2004保存的fla文件,我们就说Flash 5不支持向上兼容。

    西安电子科技大学的《计算机体系结构》的考题答案中给出兼容性的定义:
    (1)向上(下)兼容指的是按某档机器编制的软件,不加修改就能运行于比它高(低)档的机器上。
    (2)向前(后)兼容指的是按某个时期投入市场的该型号机器上编制的软件,不加修改就能运行于比它前(后)投入市场的机器上。

    展开全文
  • 写在前面上一篇文章 Android 字体国际化适配方法以及源码解析 ...v4包是如何做到向下兼容的。目的 了解v4 v7 是如何实现向下兼容的 AppCompatActivity是如何在Activity的基础上实现扩展的 看源码为了适配字体,我们

    写在前面

    上一篇文章 Android 字体国际化适配方法以及源码解析
    讲到了如何 适配各国语言长度不同的问题。

    为了兼容低版本用到了V4 包。

    用了那么久的v4包,但他是如何做到乡下兼容的呢?

    这次通过同一个适配的小例子来查看一下 。v4包是如何做到向下兼容的。

    目的

    • 了解v4 v7 是如何实现向下兼容的
    • AppCompatActivity是如何在Activity的基础上实现扩展的

    看源码

    为了适配字体,我们用了v4包下的这些方法

    
    public static void setAutoSizeTextTypeWithDefaults(
               TextView textView, 
               int autoSizeTextType) 设置字体类型
    
    
    public static void setAutoSizeTextTypeUniformWithConfiguration(
                TextView textView,
                int autoSizeMinTextSize,
                int autoSizeMaxTextSize,
                int autoSizeStepGranularity, 设置颗粒度 字体变大变小的幅度,默认是1
                int unit)
    
    public static void setAutoSizeTextTypeUniformWithPresetSizes(
                TextView textView,
                @NonNull int[] presetSizes,  设置字体预设值,字体的变化只会在预设的几个值内变化
                int unit)

    并且在上一篇中详细的讲解了 setAutoSizeTextTypeUniformWithConfiguration 方法是如何做到适配的。
    但是 我们在上一篇中 是讲解的 TextView 类中的 setAutoSizeTextTypeUniformWithConfiguration 方法,是如何适配的
    其实TextView中的方法在低于sdk-26的时候是不会调用的。
    但是在v4包中 有一个也叫作setAutoSizeTextTypeUniformWithConfiguration 的方法和TextView中是一样的。

    如何适配呢。必须是android 包中有该方法,但某些版本不适用,所以在v4 v7包中,实现一个 方法原理 一样的 方法。供低版本使用。 马上就想到了 委派模式

    首先来看这个方法

    这个是v4包中的 字体适配的方法。
        public static void setAutoSizeTextTypeUniformWithConfiguration(
                TextView textView,
                int autoSizeMinTextSize,
                int autoSizeMaxTextSize,
                int autoSizeStepGranularity,
                int unit) throws IllegalArgumentException {
            IMPL.setAutoSizeTextTypeUniformWithConfiguration(textView, autoSizeMinTextSize,
                    autoSizeMaxTextSize, autoSizeStepGranularity, unit);
        }
    

    在看IMPL

    
    
        static final TextViewCompatBaseImpl IMPL;
    
        static {
            if (Build.VERSION.SDK_INT >= 26) {
                IMPL = new TextViewCompatApi26Impl();
            } else if (Build.VERSION.SDK_INT >= 23) {
                IMPL = new TextViewCompatApi23Impl();
            } else if (Build.VERSION.SDK_INT >= 18) {
                IMPL = new TextViewCompatApi18Impl();
            } else if (Build.VERSION.SDK_INT >= 17) {
                IMPL = new TextViewCompatApi17Impl();
            } else if (Build.VERSION.SDK_INT >= 16) {
                IMPL = new TextViewCompatApi16Impl();
            } else {
                IMPL = new TextViewCompatBaseImpl();
            }
        }
    

    上面代码中 TextViewCompatApi26Impl 方法继承自TextViewCompatApi23Impl ,然后所有的方法都是继承自 TextViewCompatBaseImpl

    先看TextViewCompatApi26Impl 方法

    
        @RequiresApi(26)
        static class TextViewCompatApi26Impl extends TextViewCompatApi23Impl {
    
          ...省略
    
            @Override
            public void setAutoSizeTextTypeUniformWithConfiguration(
                    TextView textView,
                    int autoSizeMinTextSize,
                    int autoSizeMaxTextSize,
                    int autoSizeStepGranularity,
                    int unit) throws IllegalArgumentException {
                textView.setAutoSizeTextTypeUniformWithConfiguration(
                        autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
            }
    
           ...省略
        }
    
    

    可见该类继承自TextViewCompatApi23Impl
    这里有我们前面说的那三个方法。但是改方法只能在sdk大于26 才会使用

    假如我们的sdk版本号不大于26呢?
    我们不断的看 TextViewCompatApi26Impl 的父类。最终查看到
    TextViewCompatBaseImpl 方法

    
        static class TextViewCompatBaseImpl {
            ...省略
            public void setAutoSizeTextTypeUniformWithConfiguration(
                    TextView textView,
                    int autoSizeMinTextSize,
                    int autoSizeMaxTextSize,
                    int autoSizeStepGranularity,
                    int unit) throws IllegalArgumentException {
                if (textView instanceof AutoSizeableTextView) {
                    ((AutoSizeableTextView) textView).setAutoSizeTextTypeUniformWithConfiguration(
                            autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
                }
            }
    
             ...省略
        }
    

    在这里也发现了setAutoSizeTextTypeUniformWithConfiguration 方法。继续看他的方法。

    if (textView instanceof AutoSizeableTextView) {
                    ((AutoSizeableTextView) textView).setAutoSizeTextTypeUniformWithPresetSizes(
                            presetSizes, unit);
                }
    //判断textview 是否是实现过 AutoSizeableTextView 方法
    
    AutoSizeableTextView 是一个借口类
    

    不要慌,我们全局查看 AutoSizeableTextView 方法
    在AutoSizeableTextView 方法中,右键,选择Find Usages

    这里写图片描述

    发现在三个类里面使用过。
    TextViewCompat 方法 不需要看了。

    下面看AppCompatTextView 方法 (support.v7下的)

    public class AppCompatTextView extends TextView implements TintableBackgroundView,
            AutoSizeableTextView {
            ...省略
    
    
        /**
         * This should be accessed via
         * {@link android.support.v4.widget.TextViewCompat#setAutoSizeTextTypeUniformWithConfiguration(
         *        TextView, int, int, int, int)}
         *
         * @hide
         */
        @RestrictTo(LIBRARY_GROUP)
        @Override
        public void setAutoSizeTextTypeUniformWithConfiguration(
                int autoSizeMinTextSize,
                int autoSizeMaxTextSize,
                int autoSizeStepGranularity,
                int unit) throws IllegalArgumentException {
            if (Build.VERSION.SDK_INT >= 26) {
                super.setAutoSizeTextTypeUniformWithConfiguration(
                        autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
            } else {
                if (mTextHelper != null) {
                    mTextHelper.setAutoSizeTextTypeUniformWithConfiguration(
                            autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
                }
            }
        }
    
            ...省略
    }

    这里就很明朗了。如果sdk大于26,使用TextView中的方法。如果不大于26.使用mTextHelper 下的方法

    
    @RequiresApi(9)
    class AppCompatTextHelper {
           ...省略
        void setAutoSizeTextTypeUniformWithConfiguration(
                int autoSizeMinTextSize,
                int autoSizeMaxTextSize,
                int autoSizeStepGranularity,
                int unit) throws IllegalArgumentException {
            mAutoSizeTextHelper.setAutoSizeTextTypeUniformWithConfiguration(
                    autoSizeMinTextSize, autoSizeMaxTextSize, autoSizeStepGranularity, unit);
        }
            ...省略
    }
    
    
    class AppCompatTextViewAutoSizeHelper {
            ...省略
     @RestrictTo(LIBRARY_GROUP)
        void setAutoSizeTextTypeUniformWithConfiguration(
                int autoSizeMinTextSize,
                int autoSizeMaxTextSize,
                int autoSizeStepGranularity,
                int unit) throws IllegalArgumentException {
            if (supportsAutoSizeText()) {
                final DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
                final float autoSizeMinTextSizeInPx = TypedValue.applyDimension(
                        unit, autoSizeMinTextSize, displayMetrics);
                final float autoSizeMaxTextSizeInPx = TypedValue.applyDimension(
                        unit, autoSizeMaxTextSize, displayMetrics);
                final float autoSizeStepGranularityInPx = TypedValue.applyDimension(
                        unit, autoSizeStepGranularity, displayMetrics);
    
                validateAndSetAutoSizeTextTypeUniformConfiguration(autoSizeMinTextSizeInPx,
                        autoSizeMaxTextSizeInPx,
                        autoSizeStepGranularityInPx);
                if (setupAutoSizeText()) {
                    autoSizeText();
                }
            }
        }
            ...省略   
    }

    看到这里我们就发现和TextView 中的方法是一样的了。如果想跟进一步了解接下来代码实现的原理。可以查看上一篇
    Android 字体国际化适配方法以及源码解析

    到这里我们肯定有一个疑惑。这个方法是在 AppCompatTextView 中。我们有没有使用这个方法。

    我们全局搜一下 AppCompatTextView 方法
    这里写图片描述

    我们查看该方法

    class AppCompatViewInflater {
    
            ...省略   
    
        public final View createView(View parent, final String name, @NonNull Context context,
                @NonNull AttributeSet attrs, boolean inheritContext,
                boolean readAndroidTheme, boolean readAppTheme, boolean wrapContext) {
            final Context originalContext = context;
    
            // We can emulate Lollipop's android:theme attribute propagating down the view hierarchy
            // by using the parent's context
            if (inheritContext && parent != null) {
                context = parent.getContext();
            }
            if (readAndroidTheme || readAppTheme) {
                // We then apply the theme on the context, if specified
                context = themifyContext(context, attrs, readAndroidTheme, readAppTheme);
            }
            if (wrapContext) {
                context = TintContextWrapper.wrap(context);
            }
    
            View view = null;
    
            // We need to 'inject' our tint aware Views in place of the standard framework versions
            switch (name) {
                case "TextView":
                    view = new AppCompatTextView(context, attrs);
                    break;
                case "ImageView":
                    view = new AppCompatImageView(context, attrs);
                    break;
                case "Button":
                    view = new AppCompatButton(context, attrs);
                    break;
                case "EditText":
                    view = new AppCompatEditText(context, attrs);
                    break;
                case "Spinner":
                    view = new AppCompatSpinner(context, attrs);
                    break;
                case "ImageButton":
                    view = new AppCompatImageButton(context, attrs);
                    break;
                case "CheckBox":
                    view = new AppCompatCheckBox(context, attrs);
                    break;
                case "RadioButton":
                    view = new AppCompatRadioButton(context, attrs);
                    break;
                case "CheckedTextView":
                    view = new AppCompatCheckedTextView(context, attrs);
                    break;
                case "AutoCompleteTextView":
                    view = new AppCompatAutoCompleteTextView(context, attrs);
                    break;
                case "MultiAutoCompleteTextView":
                    view = new AppCompatMultiAutoCompleteTextView(context, attrs);
                    break;
                case "RatingBar":
                    view = new AppCompatRatingBar(context, attrs);
                    break;
                case "SeekBar":
                    view = new AppCompatSeekBar(context, attrs);
                    break;
            }
    
            if (view == null && originalContext != context) {
                // If the original context does not equal our themed context, then we need to manually
                // inflate it using the name so that android:theme takes effect.
                view = createViewFromTag(context, name, attrs);
            }
    
            if (view != null) {
                // If we have created a view, check its android:onClick
                checkOnClickListener(view, attrs);
            }
    
            return view;
        }
    
            ...省略   
    }
    

    我看到这里突然感觉豁然开朗。

    原来那么多控件都是在这里new 出来的。

    到这里基本能理解 是v4 v7包是如何做到向下兼容的了。

    但还不过瘾,直觉告诉我这个肯定跟AppCompatActivity 有关系。

    我们在全局搜索这个 createView 方法

    
    @RequiresApi(14)
    class AppCompatDelegateImplV9 extends AppCompatDelegateImplBase
            implements MenuBuilder.Callback, LayoutInflater.Factory2 {
    
        ...省略
    
        @Override
        public View createView(View parent, final String name, @NonNull Context context,
                @NonNull AttributeSet attrs) {
            if (mAppCompatViewInflater == null) {
                mAppCompatViewInflater = new AppCompatViewInflater();
            }
    
            boolean inheritContext = false;
            if (IS_PRE_LOLLIPOP) {
                inheritContext = (attrs instanceof XmlPullParser)
                        // If we have a XmlPullParser, we can detect where we are in the layout
                        ? ((XmlPullParser) attrs).getDepth() > 1
                        // Otherwise we have to use the old heuristic
                        : shouldInheritContext((ViewParent) parent);
            }
    
            return mAppCompatViewInflater.createView(parent, name, context, attrs, inheritContext,
                    IS_PRE_LOLLIPOP, /* Only read android:theme pre-L (L+ handles this anyway) */
                    true, /* Read read app:theme as a fallback at all times for legacy reasons */
                    VectorEnabledTintResources.shouldBeUsed() /* Only tint wrap the context if enabled */
            );
        }
                ...省略
    
    }

    AppCompatDelegateImplV9 感觉像是最低版本支持sdk9 的样子 是一个 委派
    看看哪里调用该方法呢?

    public abstract class AppCompatDelegate {
    
        ...省略
     /**
         * Create a {@link android.support.v7.app.AppCompatDelegate} to use with {@code activity}.
         *
         * @param callback An optional callback for AppCompat specific events
         * 用于扩展activity
         */
        public static AppCompatDelegate create(Activity activity, AppCompatCallback callback) {
            return create(activity, activity.getWindow(), callback);
        }
    
    
        /**
         * Create a {@link android.support.v7.app.AppCompatDelegate} to use with {@code dialog}.
         *  用于扩展dialog 
         * @param callback An optional callback for AppCompat specific events
         */
        public static AppCompatDelegate create(Dialog dialog, AppCompatCallback callback) {
            return create(dialog.getContext(), dialog.getWindow(), callback);
        }
    
        private static AppCompatDelegate create(Context context, Window window,
                AppCompatCallback callback) {
            if (Build.VERSION.SDK_INT >= 24) {
                return new AppCompatDelegateImplN(context, window, callback);
            } else if (Build.VERSION.SDK_INT >= 23) {
                return new AppCompatDelegateImplV23(context, window, callback);
            } else if (Build.VERSION.SDK_INT >= 14) {
                return new AppCompatDelegateImplV14(context, window, callback);
            } else if (Build.VERSION.SDK_INT >= 11) {
                return new AppCompatDelegateImplV11(context, window, callback);
            } else {
                return new AppCompatDelegateImplV9(context, window, callback);
            }
        }
    
        //到这里我们又发现了sdk版本号的判断。和之前在TextViewCompact方法中遇到的是一样的
    
        ...省略
    
    }

    AppCompatDelegate 类是一个 委派类,用来实现activity的扩展。
    我们继续查看这个AppCompatDelegate 下的create 在哪里用

    public class AppCompatActivity extends FragmentActivity implements AppCompatCallback,
            TaskStackBuilder.SupportParentable, ActionBarDrawerToggle.DelegateProvider {
    
        ...省略
    
        private AppCompatDelegate mDelegate;
    
        @SuppressWarnings("TypeParameterUnusedInFormals")
        @Override
        public <T extends View> T findViewById(@IdRes int id) {
            return getDelegate().findViewById(id);
        }
        /**
         * @return The {@link AppCompatDelegate} being used by this Activity.
         */
        @NonNull
        public AppCompatDelegate getDelegate() {
            if (mDelegate == null) {
                mDelegate = AppCompatDelegate.create(this, this);
            }
            return mDelegate;
        }
    
        ...省略
    
        }
    • 可以发现这个方法 在AppCompatActivity 中使用了。并且每次findviewbyid都会调用。
    • 不仅如此 生命周期中也会调用getDelegate() 方法。

    这个时候我们发现 如果我们创建的Activity 如果不继承AppCompatActivity的话 好多控件的方法都无法做到向下兼容。

    总结

    如果你跟着一步步的读完,很佩服你的毅力。

    但并没什么暖用,还是得需要你自己合上网页,自己去androidstudio中,根据我的思路 看一篇源码,这样才有收获。

    同时这里面使用了 委派模式 来巧妙的 完成了。
    那么我们下一篇 来看一下 这个委派模式 在我们的开发中是如何来实现的吧。

    转载:http://blog.csdn.net/wanghao200906/article/details/78593562

    展开全文
  • 向上兼容和向下兼容

    千次阅读 2015-07-23 14:32:13
    向上兼容和向下兼容其实可以是对同一事情在两方面进行的不同描述而已。比如,我们针对JDK1.4平台开发的程序A能在JDK1.5平台上进行正常运行,那么此时我们就说:程序A向上兼容JDK1.5平台,而JdK1.5平台向下兼容程序B...
    向上兼容和向下兼容其实可以是对同一事情在两方面进行的不同描述而已。比如,我们针对JDK1.4平台开发的程序A能在JDK1.5平台上进行正常运行,那么此时我们就说程序A向上兼容JDK1.5平台,而JdK1.5平台向下兼容程序B
    如果我们针对JDK1.4平台开发的程序A不能在JDK1.5平台上正常运行,那么此时我们就说程序A不向上兼容JDK1.5平台,而JdK1.5平台不向下兼容程序B。当然这种情况不发生。JDK平台向下兼容所有java程序
    如果我们针对JDK1.5平台开发的程序B并没有使用JDK1.5平台的新特性而能在JDK1.4平台上正常运行,那么此时我们可以说:程序B向下兼容JDK1.4平台,而JdK1.4平台向上兼容程序B
    如果我们针对JDK1.5平台开发的程序B因为使用JDK1.5平台的新特性或其他原因而不能在JDK1.4平台上正常运行,那么此时我们可以说:程序B不向下兼容JDK1.4平台,而JdK1.4平台不向上兼容程序B
    展开全文
  • JDK向下兼容问题

    千次阅读 2018-07-27 07:36:13
    1、jdk1.6 环境, JSP页面过大,访问报错, org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 158 in the generated java file The code of method _jsp...

    1、jdk1.6 环境下, JSP页面过大,访问报错,

    org.apache.jasper.JasperException: Unable to compile class for JSP:

    An error occurred at line: 158 in the generated java file

    The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit.

    解决方案 : 升级JDK。

    2、升级之后,出问题了

    有用户登录后台就报 : Comparison method violates its general contract!

    为什么代码在JDK6中运行无问题,而在JDK7中却会抛异常呢?这是因为JDK7底层的排序算法换了,如果要继续使用JDK6的排序算法,可以在JVM的启动参数中加入如下参数:

    -Djava.util.Arrays.useLegacyMergeSort=true

    这样就会照旧使用JDK6的排序算法,在不能修改代码的情况下,解决这个兼容的问题。

     

    展开全文
  • 关于Android 版本向下兼容

    千次阅读 2013-08-04 20:15:50
     N久未做android了,以前做的时候,2.2才刚出来,现在android都更新到了4.3了,而从前一段时间android各个sdk版本市场占有率 来看,1.6、2.1还是占有一定的市场,故在有些时候,我们还是得要考虑兼容这些版本。...
  • 首先说个数字:就全世界总体统计来说,这种情况1%的可能性是灵魂伴侣,99%都是向下兼容。有一点可以很好的分辨,就是在你们“深入灵魂的交谈”结束分开后下一次再见面时他/她见到你后的第一个表情。职业微笑和发自...
  • 一分钟理解兼容

    千次阅读 2017-01-29 09:20:51
    兼容 就是 历史兼容,你理解对了吗?
  • Tomcat 支持的Java 版本和兼容性总结

    万次阅读 多人点赞 2014-12-28 16:07:26
    最新最全的Tomcat 支持的Java版本对照,即兼容性一览表: Servlet Spec JSP Spec EL Spec WebSocket Spec Apache Tomcat version Actual release revision Support Java Versions 4.0 TBD (2.4?)...
  • sqlserver2012转2008、sqlserver2012备份
  • 2014-06-15 10:21 12827人阅读 评论(2) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载。 ....Net版本之间是有一定联系的,目前(2010-04月)为止微软推出了3个版本的CLR,分别是 1.1, 2.0...
  • 向前兼容兼容

    千次阅读 2008-11-15 22:34:00
    向前兼容兼容这两个名词老是搞混淆,查了这个写的比较好,抄来了!向前兼容:以前的版本支持现在版本生成的数据。现在的版本支持以后的版本数据? 是针对以前版本来说的兼容:现在的版本可以支持以前的...
  • SQL SERVER兼容包地址

    千次阅读 2015-09-02 14:13:34
    SQL2008兼容包地址  32位版:  http://download.microsoft.com/download/3/C/A/3CADE400-3EF4-4C35-B33D-587FC01CA7C6/SQLServer2005_BC.msi  64位版:  ...
  • 网上找了好多资料,但是每次遇到的问题都不一样,每次都要去查(就是是一样的问题,解决办法也可能会不一样)每次踩坑无数,今天痛定思痛,决心总结一下。 基本概念 CUDA:用于GPU编程的语言,跑TF的时候用了GPU...
  • SQLserver版本的问题已经受够了,就算同是2008 R2,打了sp3和sp2都有天差地别,并不能依赖备份或者分离数据库就一定在别的服务器还原的了 还是用脚本吧,在此记录一下
  • “向前兼容”与“兼容

    千次阅读 2014-04-15 11:27:14
    向后兼容(Backwardscompatibility),又称向下兼容(DownwardCompatible)是一个以部件标准为基础的性能要求,是它最新的标准规范。向后兼容的组件既要符合其所属分类的性能要求,同时也要符合低于其分类的所有性能...
  • 关于,net Framework各版本兼容性问题

    万次阅读 2015-07-21 11:18:22
    有些软件要求先安装.NET Framework 2.0、有些软件要求先装.net 3.5,我想问一下,如果我已经安装了高版本的.net,比如.net 4.0,那么是否可以兼容这些需要在旧版.net Framework运行的应用程序,如
  • 兼容不同CPU框架加载so文件问题, CPU架构对应的so文件所在位置 arm64-v8a armeabi-v7a armeabi mips mips64 x86 x86_64
  • Java版本兼容问题

    千次阅读 2018-10-05 16:56:10
    随着Java版本的升级,编译工具与运行环境都有一定的升级,不过官方称这些都是向下兼容的。 如何理解向下兼容向下兼容说的意思是当前版本以及其下所有版本编译的项目都可在当前版本对就的JRE下运行;与其相反是,...
  • Eclipse与JDK多版本兼容性设置

    千次阅读 2016-11-30 21:56:52
    在实际开发环境中,经常需要同时运行32位与64位的Eclipse与JDK,为了保持它们的兼容性,需要进行如下设置。1. 同时安装JDK 32bit与JDK 64bit如果需要在64位的Windows上同时安装JDK 32bit与JDK 64bit,则需要进行如下...
  • [漫画]程序员的日常生活 68

    千次阅读 2016-01-04 22:13:45
    程序员的日常生活 68 向下兼容?!程序员的日常生活 68 向下兼容?!程序员的日常生活 68 向下兼容?!程序员的日常生活 68 向下兼容?!程序员的日常生活 68 向下兼容?!程序员的日常生活 68 向下兼容?!程序员的...
1 2 3 4 5 ... 20
收藏数 404,405
精华内容 161,762
关键字:

向下兼容