gpt4 book ai didi

java - 使用实例变量与将数据作为参数传递

转载 作者:搜寻专家 更新时间:2023-11-01 08:45:01 25 4
gpt4 key购买 nike

使用实例变量而不是将数据作为参数传递时有什么缺点。

使用实例变量对我来说似乎更具可读性,但是让整个类(class)都可以使用它们有缺点吗?我想这是从全局变量和局部变量的角度来看的。

使用实例变量

public class ChoicesFragment extends Fragment implements View.OnClickListener {
private CharSequence[] mButtonTextData;
private String mTitleTextData;

private View mUserChoiceView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mUserChoiceView = inflater.inflate(R.layout.available_choices, container, false);

getBundleData();

setTitle();
setButtons();

return mUserChoiceView;
}

private void getBundleData() {
//populate button text
Bundle bundleData = getArguments();
mTitleTextData = bundleData.getString(CardFragment.TITLE_TEXT_KEY);
mButtonTextData = bundleData.getCharSequenceArray(CardFragment.BUTTON_TEXT_KEY);
}

private void setTitle() {
TextView title = (TextView) mUserChoiceView.findViewById(R.id.choicesTextView1);
String genericTitle = getResources().getString(R.string.title_selection);
title.setText(genericTitle + mTitleTextData);
}

//sets up button data
public void setButtons() {
TextView[] buttonsTextView = new TextView[4];
buttonsTextView[0] = (TextView) mUserChoiceView.findViewById(R.id.choicesTextView2);
buttonsTextView[1] = (TextView) mUserChoiceView.findViewById(R.id.choicesTextView3);
buttonsTextView[2] = (TextView) mUserChoiceView.findViewById(R.id.choicesTextView4);
buttonsTextView[3] = (TextView) mUserChoiceView.findViewById(R.id.choicesTextView5);

for(int i = 0; i < buttons.length; i++) {
buttonsTextView[i].setText(mButtonTextData[i]);
}
}
}

第二个例子将数据作为参数传递

public class ChoicesFragment extends Fragment implements View.OnClickListener { 
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View userChoiceView;

String titleTextData;
CharSequence[] buttonTextData;

mUserChoiceView = inflater.inflate(R.layout.available_choices, container, false);

Bundle bundleData = getArguments();
buttonTextData = bundleData.getString(CardFragment.TITLE_TEXT_KEY);
titleTextData = bundleData.getCharSequenceArray(CardFragment.BUTTON_TEXT_KEY);

setTitle(userChoiceView, titleTextData);
setButtons(userChoiceView, buttonTextData);

return mUserChoiceView;
}

private void setTitle(View userChoiceView, String titleText) {
TextView title = (TextView) userChoiceView.findViewById(R.id.choicesTextView1);
String genericTitle = getResources().getString(R.string.title_selection);
title.setText(genericTitle + titleText);
}

//sets up button data
public void setButtons(View userChoiceView, CharSequence[] buttonText) {
TextView[] buttonsTextView = new TextView[4];
buttonsTextView[0] = (TextView) userChoiceView.findViewById(R.id.choicesTextView2);
buttonsTextView[1] = (TextView) userChoiceView.findViewById(R.id.choicesTextView3);
buttonsTextView[2] = (TextView) userChoiceView.findViewById(R.id.choicesTextView4);
buttonsTextView[3] = (TextView) userChoiceView.findViewById(R.id.choicesTextView5);

for(int i = 0; i < buttons.length; i++) {
buttonsTextView[i].setText(buttonText[i]);
}
}
}

最佳答案

使用参数可以使方法自包含。您永远不必想知道实例变量有什么值,因为您将数据作为参数传递。

除了封装的非常有用的好处之外,参数化方法比依赖于实例变量值的方法更容易进行单元测试。

关于java - 使用实例变量与将数据作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29321398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com