我有一些具有相似屬性、方法和初始化代碼的東西。喜歡
public class LoadElement {
LoadingElementBinding binding;
public LoadElement(ViewGroup parent) {
binding = LoadingElementBinding.inflate(
LayoutInflater.from(parent.getContext()),
parent,
false));
binding.setLifecycleOwner(ViewTreeLifecycleOwner.get(parent));
}
public void doDomething() {
//somehing do with binding
}
}
public class ErrorElement {
ErrorElementBinding binding;
public ErrorElement(ViewGroup parent) {
binding = ErrorElementBinding.inflate(
LayoutInflater.from(parent.getContext()),
parent,
false));
binding.setLifecycleOwner(ViewTreeLifecycleOwner.get(parent));
}
public void doDomething() {
//somehing do with binding
}
}
我想將這段代碼分組并寫一些像
public abstract class BindingElement <T extends ViewDataBinding>{
T binding;
public BindingElement (ViewGroup parent) {
binding = createBinding(LayoutInflater.from(parent.getContext()), parent);
binding.setLifecycleOwner(ViewTreeLifecycleOwner.get(parent));
}
abstract T createBinding(ViewGroup parent, LayoutInflater inflater);
public void doDomething() {
//somehing do with binding
}
}
public class LoadElement extends BindingElement<LoadingElementBinding>{
public LoadElement(ViewGroup parent) {super(parent)}
@Override LoadingElementBinding createBinding(ViewGroup parent, LayoutInflater inflater){
return LoadingElementBinding.inflate(
LayoutInflater.from(parent.getContext()),
parent,
false));
}
}
public class ErrorElement extends BindingElement<ErrorElementBinding>{
public ErrorElement(ViewGroup parent) {super(parent)}
@Override ErrorElementBinding createBinding(ViewGroup parent, LayoutInflater inflater){
return ErrorElementBinding.inflate(
LayoutInflater.from(parent.getContext()),
parent,
false));
}
}
它是分組的,當我添加新的類似類時,我永遠不會忘記確定我的屬性(系結)。但是這段代碼是錯誤的,因為我使用了建構式中的非最終函式或抽象函式。
但是我怎樣才能以 java oop 風格正確地分組我的代碼呢?
uj5u.com熱心網友回復:
您可以使用 lambda 運算式/方法參考:
@FunctionalInterface
public interface BindingCreator<T extends ViewDataBinding>{
T createBinding(LayoutInflater inflator, ViewGroup parent, boolean addToParent);
}
public abstract class BindingElement <T extends ViewDataBinding>{
T binding;//maybe make it protected
public BindingElement(ViewGroup parent, BindingCreator<T> bindingCreator){
binding = bindingCreator.createBinding(
LayoutInflater.from(parent.getContext()),
parent,
false));
binding.setLifecycleOwner(ViewTreeLifecycleOwner.get(parent));
}
public void doDomething() {
//somehing do with binding
}
}
public class LoadElement extends BindingElement<LoadingElementBinding>{
public LoadElement(ViewGroup parent) {
super(parent, LoadingElementBinding::inflate);
}
}
public class ErrorElement extends BindingElement<ErrorElementBinding>{
public LoadElement(ViewGroup parent) {
super(parent, ErrorElementBinding::inflate);
}
}
BindingCreator包含一個“單個抽象方法”createBinding并且運算式(方法參考)LoadingElementBinding::inflate創建一個BindingCreatorwherecreateBinding是通過LoadingElementBinding.inflate使用相同的引數呼叫來實作的。像這樣的實體只是傳遞給超級建構式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/535073.html
標籤:爪哇安卓哎呀
上一篇:多處理:實體在迭代時不受影響
下一篇:6個步驟強化 CI/CD 安全
