メソッドとしてのカスタム・フィルタの設定

カスタム・フィルタもメソッドとして実装できます。メソッド参照はインライン・ラムダ式のかわりに使用されます。

次の例で定義されるdateTimeFilterメソッドは、個別のストリームのカスタム・フィルタの設定のコード・サンプルで使用されています。

    public class FilterClass {
        static ObjectInputFilter.Status dateTimeFilter(ObjectInputFilter.FilterInfo info) {
            Class<?> serialClass = info.serialClass();
            if (serialClass != null) {
                return serialClass.getPackageName().equals("java.time")
                        ? ObjectInputFilter.Status.ALLOWED
                        : ObjectInputFilter.Status.REJECTED;
            }
            return ObjectInputFilter.Status.UNDECIDED;
        }
    }

このカスタム・フィルタは、JDKのベース・モジュールにあるクラスのみを許可します:

        static ObjectInputFilter.Status baseFilter(ObjectInputFilter.FilterInfo info) {
            Class<?> serialClass = info.serialClass();
            if (serialClass != null) {
                return serialClass.getModule().getName().equals("java.base")
                        ? ObjectInputFilter.Status.ALLOWED
                        : ObjectInputFilter.Status.REJECTED;
            }
            return ObjectInputFilter.Status.UNDECIDED;
       }