trait

Groovy 2.3 trait语法介绍

南楼画角 提交于 2019-12-10 05:36:20
Groovy 2.3 trait语法介绍 http://www.javacodegeeks.com/2014/04/groovy-2-3-introduces-traits.html 前几天,Groovy 2.3的第二个beta版本 发布 。Groovy 2.3最重要的新特性之一是 trait语法 。trait是一组可重用的方法和字段,可以将它们混入到一个或多个类中。一个类可以同时拥有多个trait而不需要使用 多重继承 (从而避免 钻石问题 )。 基本用法 在Groovy 2.3中,这样定义一个基本的trait: trait SwimmingAbility { def swim() { println "swimming.." } } trait的定义与类的定义非常相似。SwimmingAbility trait只定义了一个swim()方法。接下来就可以使用implements关键字来向类中加入这个trait: class Goldfish implements SwimmingAbility { .. } 现在,我们就可以调用Goldfish对象的swim()方法了。 def goldfish = new Goldfish() goldfish.swim() 到这里,我们已经实现了与继承同样的功能。不同的是,我们可以添加多个trait到同一个类中。下面,我们定义其它的trait

TODO:Laravel 内置简单登录

一个人想着一个人 提交于 2019-12-09 10:00:58
TODO:Laravel 内置简单登录 1. 激活Laravel的Auth系统Laravel 利用 PHP 的新特性 trait 内置了非常完善好用的简单用户登录注册功能,适合一些不需要复杂用户权限管理的系统,例如公司内部用的简单管理系统。运行以下命令: php artisan make:auth 运行成功显示 Authentication scaffolding generated successfully. 2. 在路由代码里面加入了 Auth::routes() 主要实现权限的登录、用户注册、用户退出 登录访问http://127.0.0.1:8000/login: 用户注册http://127.0.0.1:8000/register: 登录成功后才可访问/home页面,不然一直处于登录页面 3. 简单的分析auth的代码,只要在需要加权限的Controller的php代码加入构造函数的auth代码即可,如图: 可以看到AuthorizesRequests, DispatchesJobs, ValidatesRequests都是trait;auth是以一种中间件的模式被加入到代码中,中间件是laravel到重要组成部分,我们也可以创建中间件来进行使用。Laravel自带的中间件有auth,web,http,route,session,view等,创建中间件方法很简单: php

浅谈Scala的特质(trait)

三世轮回 提交于 2019-12-07 19:07:30
虽然scala的特征相当于Java的接口,但是在使用上,我觉得scala的特征更像抽象类。 一个trait 就是把一些共同的性质抽象出来,哪个类需要就混入. 比如我们要开发一个2D图形库,必然涉及到矩形对象的定义。 一个矩形可以由对角线上的两个端点唯一确定。矩形对象一般具有获取左右边界和获取宽度的方法。不妨定义如下的类: class Point(val x: Int, val y: Int) class Rectangle(val topLeft: Point, val bottomRight: Poit){ def left = topLeft.x def right = bottomRight.x def width = rigth - left // more methods } 考虑到按钮(Button), 文本框(TextBox)等具有“矩形形状”的对象都应该具有left right , width 这些方法,于是我们自然而然会把具有“矩形”特征的操作抽象出来。然而在Java中,这种抽象遇到一点麻烦,如果我们把这几个方法定义在Java接口(interface)中,则每个实现这种接口的类都必须实现接口中的所有方法,事实上这三个方法:left, right,width在大部分的实现类中的默认实现都是雷同的。如果把他们定义在抽象类中,虽然能给出方法的默认实现

PHP中实现代码复用的Trait方法的一些特性

女生的网名这么多〃 提交于 2019-12-07 13:48:56
在整理“PHP基础”这篇文档时,看到了trait方法,感觉比较陌生,所以今天上午用两个小时的时间,查阅测试了trait方法的一些特性及用法,整理发布了这篇博客。 Trait 是 PHP5.4 中的新特性,是 PHP 多重继承的一种解决方案。例如,需要同时继承两个 Abstract Class , 这将会是件很麻烦的事情, Trait 就是为了解决这个问题。 trait 的简单使用 trait使用前需要先定义,trait的定义方式和类的定义方式差不多 trait first_trait { function first_method() { /* Code Here */ } function second_method() { /* Code Here */ } } 同时,如果要在 Class 中使用该 Trait ,那么需要使用 use 关键字 class first_class { // 注意这行,声明使用 first_trait use first_trait; } $obj = new first_class();// Executing the method from trait $obj->first_method(); // valid $obj->second_method(); // valid 我们在类中可以直接声明使用被定义好的trait,之后在类被实例化后

Scala&Android下的开发trait经验分享

本秂侑毒 提交于 2019-12-03 15:40:21
前一段时间写了一个在Android中加入AdMob的博客,详见 http://my.oschina.net/noahxiao/blog/61987 还有一个用Scala开发Android应用-使用trait与implicit优化Activity,详见 http://my.oschina.net/noahxiao/blog/61720 首先说明一下,我在android下是采用scala语言开发的。并不想讨论太多语言的好坏。只是把我开发时的经验与大家分享一下。 class ScalaAndroidActivity extends Activity with AdMobAdvertising with TestDataSource1 with TestDataSource2 大家先不要晕scala语言的继承关系是可以这样写的。with... 1、trait AdMobAdvertising package org.noahx.common import FindView._ import android.app.Activity import android.widget.LinearLayout import com.google.ads.AdView import com.google.ads.AdSize import com.google.ads.AdRequest import