I am trying to use java streams as much as possible.
One handicap is, converting local variables to effective finals.
here is an example of non effective final variable:
var yetkiliAdı = TS_SQLSelectUtils.select(cp.sqlAnc, "hamsiparis").columns(
"STR254_YETKILI"
).whereFirstColumnAsId(so.selectedId).getStr();
if (TGS_StringUtils.isNullOrEmpty(yetkiliAdı)) {
yetkiliAdı = TS_SQLSelectUtils.select(cp.sqlAnc, "firma").columns(
"STR254_YETADI"
).whereFirstColumnAsId(tedFirmId).getStr();
}
yetkiliAdı = TGS_StringUtils.toNullIfEmpty(yetkiliAdı);
I am trying to convert this code to effective final by below:
var yetkiliAdı = TGS_Coronator.of("")
.anoint(
val -> TS_SQLSelectUtils.select(cp.sqlAnc, "hamsiparis")
.columns("STR254_YETKILI")
.whereFirstColumnAsId(so.selectedId)
.getStr()
).anointIf(val -> TGS_StringUtils.isNullOrEmpty(val),
val -> TS_SQLSelectUtils.select(cp.sqlAnc, "firma")
.columns("STR254_YETADI")
.whereFirstColumnAsId(tedFirmId)
.getStr()
).anoint(
val -> TGS_StringUtils.toNullIfEmpty(val)
).coronate();
However I get the error "incompatible types: Object cannot be converted to CharSequence"
I tried to put the code in github with my limited knowledge
TGS_Coronator.java:
package com.tugalsan.api.coronator.client;
import com.tugalsan.api.compiler.client.*;
import com.tugalsan.api.pack.client.*;
import com.tugalsan.api.validator.client.*;
import java.util.*;
public class TGS_Coronator<T> {
//CONSTRUCTOR
private T bufferedValue;
public TGS_Coronator(T initVal) {
bufferedValue = initVal;
}
public static <T> TGS_Coronator of(T initialValue) {
return new TGS_Coronator(initialValue);
}
//LOADERS
private List<TGS_Pack3<TGS_CompilerType1<T, T>, TGS_ValidatorType1<T>, /*is it stopper*/ Boolean>> pack = new ArrayList();
public TGS_Coronator<T> anoint(TGS_CompilerType1<T, T> val) {
pack.add(new TGS_Pack3(val, null, null));
return this;
}
public TGS_Coronator<T> coronateIf(TGS_ValidatorType1<T> validate, TGS_CompilerType1<T, T> val) {
if (validate.validate(bufferedValue)) {
pack.add(new TGS_Pack3(null, validate, true));
}
return this;
}
public TGS_Coronator<T> anointIf(TGS_ValidatorType1<T> validate, TGS_CompilerType1<T, T> val) {
if (validate.validate(bufferedValue)) {
pack.add(new TGS_Pack3(val, validate, false));
}
return this;
}
public TGS_Coronator<T> anointAndCoronateIf(TGS_ValidatorType1<T> validate, TGS_CompilerType1<T, T> val) {
if (validate.validate(bufferedValue)) {
pack.add(new TGS_Pack3(val, validate, true));
}
return this;
}
//FETCHER
public T coronate() {
for (var comp : pack) {
var setter = comp.value0;
var validator = comp.value1;
var validatorIsStopper = comp.value2;
if (validator == null) {
bufferedValue = setter.compile(bufferedValue);
continue;
}
if (!validator.validate(bufferedValue)) {
continue;
}
if (setter != null) {
bufferedValue = setter.compile(bufferedValue);
}
if (validatorIsStopper) {
return bufferedValue;
}
}
return bufferedValue;
}
}
Any directions?
I found the error after 1 day.
I forgot to define return type on of function:
wrong code:
public static <T> TGS_Coronator of(T initialValue) {
return new TGS_Coronator(initialValue);
}
right code:
public static <T> TGS_Coronator<T> of(T initialValue) {
return new TGS_Coronator(initialValue);
}
full code at github