Skip to content

Instantly share code, notes, and snippets.

View RayStarkMC's full-sized avatar

RayStark RayStarkMC

View GitHub Profile
@RayStarkMC
RayStarkMC / Kotlinで作るST.md
Last active September 4, 2023 14:58
Kotlinで作れなかったST

Kotlinで作るST

//TODO 解説

@RayStarkMC
RayStarkMC / ComposerNF1.java
Last active November 28, 2020 00:36
巨大な合成関数を生成した時のスタックオーバーフロー対策
package raystark.eflib.function.notnull.composer;
import org.jetbrains.annotations.NotNull;
import raystark.eflib.function.notnull.NF1;
import raystark.eflib.util.OneShotState;
import java.util.Deque;
import java.util.LinkedList;
public final class ComposerNF1<T1, R> {
@RayStarkMC
RayStarkMC / TypesafeBinaryVisitorSample.java
Created November 7, 2020 09:19
Visitorパターンの2変数以上への拡張
public class TypesafeBinaryVisitorSample {
public static abstract class Type implements Acceptor {
private Type(){}
public static final class Type1 extends Type {
@Override
public <R> R accept(Visitor1<R> visitor1) {
return visitor1.visit(this);
}
}
@RayStarkMC
RayStarkMC / PhantomBuilderSample.java
Created November 6, 2020 12:00
幽霊型を用いた不変オブジェクトの型安全な不変ビルダのサンプルコード
public class PhantomBuilderSample {
public static class Data {
private final int field1;
private final int field2;
private final int field3;
private final int optField1;
private final int optField2;
private Data(Builder<OK, OK, OK> builder) {
@RayStarkMC
RayStarkMC / GenericMethodReferenceIssueSample.java
Created October 25, 2020 05:26
メソッド参照時の型指定が意味を成さない問題のサンプルコード
import java.util.function.UnaryOperator;
public class GenericMethodReferenceIssueSample {
static <T> T genericMethod(T t) {
return t;
}
static <T> UnaryOperator<T> of(UnaryOperator<T> t) {
return t;
}
@RayStarkMC
RayStarkMC / MethodResolveIssueSample.java
Created October 25, 2020 04:50
ジェネリッククラスでstaticメソッドの参照に失敗する問題の最小コード
import java.util.function.Consumer;
public class MethodResolveIssueSample {
static class NonGenericClass {
static <T> void f() {
h(NonGenericClass::<T>methodToBeReferenced);
}
static <T> void methodToBeReferenced(T t1) {}
}
@RayStarkMC
RayStarkMC / SampleTry2.java
Created October 24, 2020 13:02
Try型による静的例外処理の例
import raystark.eflib.exhandler.Try2;
public class SampleTry2 {
//チェック例外型
static class LargerThan10Exception extends Exception {}
static class LargerThan20Exception extends Exception {}
static class MiddleException extends Exception {}
//可変データ
private static int value;
@RayStarkMC
RayStarkMC / ExtendedFunctionLibrary-1.2.1.pom
Created October 13, 2020 07:04
GitHub Packagesにアップロードできないプロジェクトのpomファイル、何か不味いんだろうか…
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- This module was also published with a richer model, Gradle metadata, -->
<!-- which should be used instead. Do not delete the following line which -->
<!-- is to indicate to Gradle or any Gradle module metadata file consumer -->
<!-- that they should prefer consuming it instead. -->
<!-- do_not_remove: published-with-gradle-metadata -->
<modelVersion>4.0.0</modelVersion>
<groupId>raystark.eflib</groupId>
@RayStarkMC
RayStarkMC / FizzBuzz.java
Last active October 12, 2020 07:00
FizzBuzzデモンストレーション
import raystark.fizzbuzz.FizzBuzzRule;
import raystark.fizzbuzz.FizzBuzzer;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.IntStream;
import static java.util.stream.Collectors.toList;
/**
@RayStarkMC
RayStarkMC / CaptureMethodExample.java
Created October 11, 2020 07:22
キャプチャメソッドの使用例
public static void main(String[] args) {
Function<?, ?> f = Function.identity();
Object obj = new Object();
// これは出来ない
// f.apply((?)obj);
//これは出来る
Object obj2 = captureMethod(f, obj);