我用Java编写Android应用程序。我的类有两个构造函数 - 一个在直接传递数据时使用,第二个if类应该从bundle反序列化数据。一切看起来更像是:
public class MyClass {
private final ObservableInt myField;
private final int data;
public MyClass(int data) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = data;
}
public MyClass(Bundle bundle) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = bundle.getInt("SomeName");
}
}
考虑上面一个简单的例子。我有更多的最终字段要填写,还有更多data
- 类型的字段。
现在请注意,在每个构造函数中重复此代码:
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
我想将它重构到一个地方以避免干旱问题。我尝试创建私有构造函数并在上面的每个构造函数中调用this()
,但编译器抱怨说," data"字段可能尚未初始化,我不想通过参数将其传递给该私有构造函数,因为在我的情况下,有很多data
要填充。
答案 0 :(得分:1)
您可以尝试使用这样的初始化程序:
<script type="text/javascript">
google.charts.load('current', {'packages':['corechart']});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var jsonData = $.ajax({
url: "<?php echo base_url() . 'index.php/main/lihat_graph' ?>",
dataType: "json",
async: false
}).responseText;
var data = new google.visualization.DataTable(jsonData);
var options = {
title: '',
hAxis: {title: 'Jumlah Kepakaran'},
vAxis: {title: 'Jumlah Kepakaran'},
bubble: {textStyle: { fontName: 'arial', fontSize: 12 }},
colors: ['beige','pink','#00ADF9', 'maroon', 'red', 'green', 'purple', 'gray', 'orange']
};
if(data.getNumberOfRows() == 0){
$("#chart_div").append("Graf Bidang Kepakaran masih dalam proses
pengumpulan data. Graf akan dipaparkan setelah proses pengumpulan data
selesai.")
}else{
var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
chart.draw(data, options);
}
}
$(window).resize(function(){
drawChart();
});
</script>
答案 1 :(得分:-1)
尝试创建私有构造函数并调用this()
你可能不总是可以选择DRY,但在你的情况下我会链接构造函数:
$limit = 'some_large_number'
答案 2 :(得分:-1)
使用&#34; int&#34;构造函数默认为:
public class MyClass {
private final ObservableInt myField;
private final int data;
public MyClass(int data) {
myField = new ObservableInt();
myField.addOnChangedListener(myListener);
this.data = data;
}
public MyClass(Bundle bundle) {
this(bundle.getInt("SomeName"));
}
}