学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的派生类,是类不是对象。