zoukankan      html  css  js  c++  java
  • java 学习4 callback 回调 和泛型

    学oc语法 还用了一周。没向导 学java 语法。一天时间。就一大半了。 

    这个流程还是不错的。后面还有io .以及反射。多线程。后2个,可以不在熟悉基本语法流程中。

    java 还是很规矩和强力的语言。回调 非常 标准和简洁 和c# 一样 。

    需求:假如我们有个方法可以显示一些字符信息。如果我们需要修改信息。一般都是修改类本身的方法。 如果需要不修改类,而达到此自定义信息的目的。那么就必须回调 。

    构架:本类提供输入信息。要求外部类提供输出。 简洁手段:本类包含一个类b。调用类b的方法。结束。

    由此引申出很多东西。 如c# 的。用叔祖包含类b。导致可以多个观察者 。很多东西 。c#的事件 。oc的协议。c++的网络模式。无一不是回调的使用和变化。

    徽调接口

    package com.linson;
    
    public interface IShowBase 
    {
        public String showbase(goods gsinfo);
    }

    使用徽调接口者

        public IShowBase showBaseHandler;
        
       public String MyBaseInfo_Custom()
        {
            if(showBaseHandler==null)
            {
                return "custome hander is null";
            }
            else 
            {
                return "custome :"+ showBaseHandler.showbase(this);
            }
        }

    继承徽调接口和实现接口方法者

    public static void Study_class_callback()
        {
            Book book_cshart=new Book(0, "c#2", 3.1f, "linson", new Date());
            System.out.println(book_cshart.MyBaseInfo_Custom());
    
            HelloWord theclass=new HelloWord();
            book_cshart.showBaseHandler=(IShowBase) theclass;
            
            System.out.println(book_cshart.MyBaseInfo_Custom());
        }
        
        public String showbase(goods gsinfo)
        {
            DecimalFormat dt=new DecimalFormat();
            dt.applyLocalizedPattern("0.00000000");
            String priceformat=dt.format(gsinfo.price);
            return "ID:"+gsinfo.id+". price:"+priceformat+ "(i can define it ,but dont modify goods.java)"; 
        }

    泛型类

    public class Generic<T>
    { 
        private T key;
        public T getKey(){}
    }

    泛型方法

    public <T> T genericMethod(Class<T> tClass){}

    2个泛型间的配合

        注意红色部分。

    LSListen和IOrder 是2个独立泛型类。
    LSListen的addOrder方法规定了iorder作为参数时,泛型必须一致。

    public interface IOrder<A>
        {
            void onHappen(A data);
        }
    
    
    public class LSListen<T>
    {public List<IOrder> LISTENERS = new ArrayList<>();
    
        public void addOrder(IOrder<T> order)
        {
            LISTENERS.add(order);
        }
    
        public void unOrder(IOrder<T> order)
        {
            LISTENERS.remove(order);
        }
    
        public void NoticeOrder(T parameter)
        {
            for (IOrder item : LISTENERS)
            {
                if (item != null)
                {
                    try
                    {
                        item.onHappen(parameter);
                    }
                    catch (Exception e)
                    {
                        LSLog.Log_Exception(e);
                    }
                }
            }
        }
    }

    接口是来表示意图,是抽象的重要工具。这个是对对象而言。

    如果需要抽象的是类,而不是对象。那么要注意object 的语法:Class<? extends Handler>  来抽象所有Handler的派生类,是类不是对象。

  • 相关阅读:
    Smobiler实现手机弹窗
    在 ASP.NET Web API 中使用 Attribute 统一处理异常
    VMWare的网络模式说明
    Windows Server2008 IIS通过Nginx实现绑定多个https域名
    Error while Launching activity
    Android 动态渐变按钮
    mysql安装和配置详解以及Navicat连接失败问题
    selenium的基础学习
    使用Pandas.read_csv时出现OSError: Initializing from file failed
    sklearn 机器学习 Pipeline 模板
  • 原文地址:https://www.cnblogs.com/lsfv/p/9555413.html
Copyright © 2011-2022 走看看