�@�����N���X�ōs���Ă��������������_���ŏ����������邱�Ƃ��番����悤�ɁA�����_���������N���X�ł̐����������K�p����܂��B
�@�����N���X�ł̓N���X�����N���X�ϐ���static�ϐ��͎������鏈�����ň������Ƃ͉\�ł��B�������A���\�b�h���Œ�`����郍�[�J���ϐ��⓽���N���X����`����Ă��郁�\�b�h�̈����́Afinal�łȂ�����Q�Ƃ͂ł��Ă����炩�̏������s�����Ƃ͂ł��܂���B
�@���l�ɁA�����_���ł��N���X�ϐ���static�ϐ��������܂����Afinal�łȂ����[�J���ϐ�������͈����܂���B
�@�Ⴆ�Ύ��̊��^�C���^�[�t�F�[�X���������Ƃ��܂��B
@FunctionalInterface public interface DoSomethingInterface { void doSomething(); }
�@���̊��^�C���^�[�t�F�[�X�����̂悤�ɃN���X�ϐ���static�ϐ���������������ꂽ�������s���ꍇ�A�G���[�ɂ͂Ȃ炸����Ɏ��s�ł��܂��B
public class SampleClass { private int classField = 0; private static int staticField = 0; private void process() { DoSomethingInterface functionalInterface = () -> { classField ++; // �� ���̕ϐ����������Ƃ͉\�B staticField ++; // �� ���̕ϐ����������Ƃ͉\�B }; System.out.println("Before; classField =" + classField); System.out.println("Before; staticField =" + staticField); functionalInterface.doSomething(); // ���������s System.out.println("After; classField =" + classField); System.out.println("After; staticField =" + staticField); } public static void main(String[] args) { SampleClass sample = new SampleClass(); sample.process(); } }
Before; classField=0 Before; staticField=0 After; classField=1 After; staticField=1
�@�������A���\�b�h����final�łȂ����[�J���ϐ���\�b�h�̈�����ς��悤�Ƃ���ƃG���[�ɂȂ�܂��B
private void process() { int i = 0; DoSomethingInterface functionalInterface = () -> { i++; // �� ���̕ϐ��͈����Ȃ��̂ŃG���[�ɂȂ�܂��B }; �c�c
�@�������A���[�J���ϐ��̒l��ς����ɎQ�Ƃ���݂̂̏ꍇ�̓G���[�ɂ͂Ȃ�܂���B���̏ꍇ�̓R���p�C���������s�����G���[�ɂȂ炸�Ɏ��s�ł��܂��B
private void process() { int i = 0; DoSomethingInterface functionalInterface = () -> { System.out.println("i=" + i); }; �c�c
�@�܂��A���[�J���ϐ�����������炩�̃N���X�������ꍇ�A���̃N���X���̂�ς��邱�Ƃ͂ł��܂��A�N���X�����N���X�ϐ��̒l��ς��邱�Ƃ͉\�ł��B
�@�Ⴆ�Ύ��̃N���X���������Ƃ��܂��B
public class DummyClass { public int field; }
�@���̃N���X�ɑ��āA���̂悤�ɃN���X���g��ς��邱�Ƃ͂ł��܂��A�N���X�����N���X�ϐ���ς��Ă��A�G���[�ɂ͂Ȃ炸���������s�ł��܂��B
private void process(DummyClass argClass) { DummyClass localFiledClass = new DummyClass(); DoSomethingInterface functionalInterface = () -> { // localFiledClass = new DummyClass(); // �� �s�� // argClass = new DummyClass(); // �� �s�� localFiledClass.field++; // �� �\ argClass.field++; // �� �\ �c�c
�@�����N���X�ł͂��̓����N���X����������Ă���N���X�̃��\�b�h���Ăяo���܂��B���l�ɁA�����_���ł��N���X���̃��\�b�h���Ăяo�����Ƃ��\�ł��B
�@�Ⴆ�A���̂悤�ɃN���X�������\�b�h�ɑ��ă����_������Ăяo�����Ƃ��\�ł��B
public class SampleClass { private void process() { DoSomethingInterface functionalInterface = () -> { privateMethod(); method(); protectedMethod(); publicMethod(); staticMethod(); }; functionalInterface.doSomething(); } private void privateMethod() { System.out.println("private�̃��\�b�h���Ă�܂����B"); } void method() { System.out.println("�A�N�Z�X�C���q�Ȃ����\�b�h���Ă�܂����B"); } protected void protectedMethod() { System.out.println("protected���\�b�h���Ă�܂����B"); } public void publicMethod() { System.out.println("public���\�b�h���Ă�܂����B"); } private static void staticMethod() { System.out.println("static���\�b�h���Ă�܂����B"); } public static void main(String[] args) { SampleClass sample = new SampleClass(); sample.process(); } }
�@���ꂪ���s�����Ɖ��L�̌��ʂ��o�܂��B
private�̃��\�b�h���Ă�܂����B �A�N�Z�X�C���q�Ȃ����\�b�h���Ă�܂����B protected���\�b�h���Ă�܂����B public���\�b�h���Ă�܂����B static���\�b�h���Ă�܂����B
�@���܂Ō��Ă����悤�ɓ����N���X�̎����������_���ŏ��������邱�Ƃ͂����Ă��̏ꍇ�͉\�ł��B���������L�ɂ��Ă͓����N���X�ƃ����_���̊ԂňႢ������܂��B
�@�����N���X�̎��������ŏ����ꂽ�uthis�v�́A���̓����N���X���g��\���܂����A�����_���̏ꍇ��this�́A���̃����_�����L�q���ꂽ�N���X���̂�\���܂��B
�@�Ⴆ�A�������Ȃ��W���o�͂̂ݍs�����߂̊��^�C���^�[�t�F�[�X�����L�̂悤�Ɏ��������ꍇ�A�����N���X��this�͓����N���X�́uSampleClass$1�v��\���A�����_����this�́uSampleClass�v��\���܂��B
package jp.co.atmarkit.lambda.sample02 import �c�c //���ȗ� public class SampleClass { public static void main(String[] args) { SampleClass sample = new SampleClass(); sample.process(); } private void process() { // �����N���X�̏ꍇ DoSomethingInterface anonymous = new DoSomethingInterface () { @Override public void doSomething() { System.out.println("�����N���X�F" + this.getClass()); } }; anonymous.doSomething(); // �����_���̏ꍇ DoSomethingInterface lambda = () -> { System.out.println("�����_���F" + this.getClass()); }; lambda.doSomething(); } }
�@���s���ʂ͎��̂悤�ɂȂ�܂��B
�����N���X�Fclass jp.co.atmarkit.lambda.sample02.SampleClass$1 �����_���Fclass jp.co.atmarkit.lambda.sample02.SampleClass
Copyright © ITmedia, Inc. All Rights Reserved.