Skip to content

Instantly share code, notes, and snippets.

@RayStarkMC
Last active November 16, 2019 13:08
Show Gist options
  • Save RayStarkMC/3d4eecbcbf3b52945dc05e05bdd538a5 to your computer and use it in GitHub Desktop.
Save RayStarkMC/3d4eecbcbf3b52945dc05e05bdd538a5 to your computer and use it in GitHub Desktop.
束縛された変数どうなってるん?ってことで可変クラス作って中身を変更してみました。
//パッケージ略
import java.util.function.Supplier;
/**
* クロージャテスト
*/
public class ClosureTest {
/**
* 可変データクラス
*/
private static class Data {
/**
* int型可変データ
*/
public int num;
public Data(int num) { this.num = num; }
}
/**
*
* @param data 生成するデータ
* @return dataを生成するSupplier
*/
private static Supplier<Data> supplyData(Data data) {
return () -> data;
}
public static void main(String[] args) {
Data originalData = new Data(1);
Supplier<Data> dataSupplier1 = supplyData(originalData);
Supplier<Data> dataSupplier2 = supplyData(originalData);
Data data1 = dataSupplier1.get();
Data data2 = dataSupplier2.get();
System.out.println("[data1]" + data1.num);
System.out.println("[data2]" + data2.num);
System.out.println();
System.out.println("change data2: num = 2");
data2.num = 2;
System.out.println();
System.out.println("[data1]" + data1.num);
System.out.println("[data2]" + data2.num);
System.out.println();
System.out.println("change original: num = 3");
originalData.num = 3;
System.out.println();
System.out.println("[data1]" + data1.num);
System.out.println("[data2]" + data2.num);
}
}
/*
以下main実行結果
[data1]1
[data2]1
change data2: num = 2
[data1]2
[data2]2
change original: num = 3
[data1]3
[data2]3
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment