this在Java中使用关键字的最佳做法是什么?例如,我有以下类:
class Foo {
Bar bar;
public Foo(Bar bar) {
this.bar = bar;
}
}
Run Code Online (Sandbox Code Playgroud)
这很好,但是如果我将构造函数中的语句更改为,Java就足够聪明地知道发生了什么
bar = bar;
Run Code Online (Sandbox Code Playgroud)
那么为什么要使用this关键字?(我知道在某些情况下,使用它是完全必要的,我只是要求这样的情况).实际上,我倾向于纯粹为了可读性而使用关键字,但通常的做法是什么?例如,在整个商店中使用它会使我的代码看起来有些混乱
boolean baz;
int someIndex = 5;
this.baz = this.bar.getSomeNumber() == this.someBarArray[this.someIndex].getSomeNumber();
Run Code Online (Sandbox Code Playgroud)
显然是一个糟糕的代码,但它说明了我的例子.在这些情况下,这仅仅取决于个人偏好吗?
我HashSet<Integer>有一堆里面的Integers东西.我想把它变成一个数组,但是调用
hashset.toArray();
Run Code Online (Sandbox Code Playgroud)
返回一个Object[].int除了手动迭代每个元素之外,有没有更好的方法将其强制转换为数组?我想将数组传递给
void doSomething(int[] arr)
Run Code Online (Sandbox Code Playgroud)
它不会接受Object []数组,即使我尝试像它一样
doSomething((int[]) hashSet.toArray());
Run Code Online (Sandbox Code Playgroud) 我有一个Android活动,它从URL获取RSS提要,并使用SAX解析器将XML中的每个项目粘贴到一个数组中.这一切都很好,但正如预期的那样,需要花费一些时间,所以我想在后台使用AsyncActivity来完成它.我的代码如下:
class AddTask extends AsyncTask<Void, Item, Void> {
protected void onPreExecute() {
pDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Retrieving data ...", true);
}
protected Void doInBackground(Void... unused) {
items = parser.getItems();
for (Item it : items) {
publishProgress(it);
}
return(null);
}
protected void onProgressUpdate(Item... item) {
adapter.add(item[0]);
}
protected void onPostExecute(Void unused) {
pDialog.dismiss();
}
}
Run Code Online (Sandbox Code Playgroud)
我称之为在onCreate()与
new AddTask().execute();
Run Code Online (Sandbox Code Playgroud)
这行items = parser.getItems()很好 - items是包含XML中每个项目的arraylist.我现在面临的问题是,在启动活动,这是我创造的ProgressDialog onPreExecute()不显示,直到之后的doInBackground()方法完成.即我得到一个黑色的屏幕,一个长时间的停顿,然后一个完整填充列表中的项目.为什么会发生这种情况?为什么不是UI绘图,ProgressDialog显示,解析器获取项目并逐步将它们添加到列表中,然后ProgressDialog解雇?
我有一个MySQL数据库,其中包含人员列表,包括他们的地址,我想在查询中将其作为一个字段返回.它分裂了address1, address2, address3, address4, post_code,我想做类似以下的事情
SELECT CONCAT(`address1`, ' ', `address2`, ' ', `address3`, ' ', `address4`, ' ', `post_code`) AS `address` FROM `table`
Run Code Online (Sandbox Code Playgroud)
所以我最终得到一个完整的地址字符串,address其中工作正常,但如果某些字段为空,那么我最终会得到很多双倍空格.如何消除多余的空间?有没有比在每个字段上执行IF()更简单的方法?
我在Facebook应用程序上使用FBML的fb:comments插件(虽然它在Facebook开发者网站上被描述为"遗留"),似乎是在Canvas应用程序上获得正确的Facebook评论集成的唯一方法吗?如果有的话,请告诉我.我错了,似乎在开放海洋中航行比浏览Facebook文档更容易.我也使用JavaScript SDK订阅comment.create活动,这样我就可以跟踪谁在我的网页上发表评论.很容易,这似乎在一定程度上工作,但我有以下代码:
FB.Event.subscribe('comment.create', function(response) {
console.log(response);
});
Run Code Online (Sandbox Code Playgroud)
这将返回一个很好的JSON对象,包括以下的块:
commentID: "10150576473610309"
Run Code Online (Sandbox Code Playgroud)
大!我有一个评论ID.所以现在我转到Facebook图形API以获取有关此评论的更多信息(我想要文本,作者等),所以我在PHP中发布以下内容,因为根据Facebook文档,Facebook上的所有内容都有唯一ID,只需使用此ID启动Graph API即可获得一些甜蜜信息.
file_get_contents('http://graph.facebook.com/10150576473610309');
Run Code Online (Sandbox Code Playgroud)
不好了!这返回false.这很奇怪.所以我查看API以获取与特定页面相关的所有评论,这给了我一个评论列表......但是我刚刚添加的评论的ID是不同的,现在它的格式如下:
"id": "10150576473610309_20003210"
Run Code Online (Sandbox Code Playgroud)
什么是这个额外的下划线和数字?!使用此评论ID调用图形API会给我评论信息!这个新ID出现在哪里以及如何(以及为什么?)?(当然我尝试了Facebook开发论坛,但似乎问我的鼠标同样的问题会取得类似的结果).
我正在编写一个应用程序,要求用户从联系人列表中选择一个联系人,以便向该联系人发送短信.有什么方法可以查询联系人列表中只有那些有电话号码的联系人(即不是那些只有电子邮件地址的联系人)?目前我的代码如下所示,但是这显示了所有联系人 - 然后我必须在我的活动中执行逻辑以通知用户他们是否选择了没有关联号码的联系人并提示他们选择另一个.
Intent i = new Intent(Intent.ACTION_PICK, People.CONTENT_URI);
Run Code Online (Sandbox Code Playgroud)
第二件事,我意识到联系人API从2.0开始改变了,那么选择联系人覆盖所有Android操作系统版本的最佳做法是什么?假设新的联系人API与pre 2.0无关,我是否正确?
我在通过USB连接到主机的手机上运行了一个Android应用程序.手机将始终连接到机器,我需要向机器发送HTTP请求.在模拟器中工作,我可以使用IP地址10.0.2.2访问计算机上运行的Web服务器,并且工作正常.但是运行在手机上的相同的应用程序,我得到SocketException的Network unreachable.手机里面没有SIM卡,也没有wifi连接,我需要HTTP请求才能将USB转到电脑上.这是可能吗?如果是这样,我做错了什么.
我正在使用标准的HttpClient代码,没有什么特别的,如果我使用wifi连接在手机上运行它,它可以正常工作,所以我知道这不是问题.
我有一个活动,它使用AlarmManager在特定时间点调用BroadcastReceiver.这一切都很好,除非我在调用BroadcastReceiver时尝试向intent添加一些额外的字符串,它们总是在另一端变为null.
活动代码:
Intent intent = new Intent(this, ScheduleReceiver.class);
intent.putExtra("testString", "I'm a string");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 999, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis(), pendingIntent);
Run Code Online (Sandbox Code Playgroud)
BroadcastReceiver代码
public void onReceive(Context context, Intent intent) {
Log.v(TAG, "TestString: " + intent.getStringExtra("testString"));
}
Run Code Online (Sandbox Code Playgroud)
'teststring'的内容总是null在BroadcastReceiver中,我做错了什么?
使用openGL(仅2d),我正在尝试旋转纹理,使其指向屏幕上的一个点.我将首先展示一张图片,以帮助我解释.
http://img692.imageshack.us/img692/3088/probe.png
假设我的纹理是第1点的蓝点,它在第2点移动到目的地.我想旋转#1,使它"指向"第2点(纹理是一只鸟,所以它有一个定义的"前面" ").要做到这一点,我需要找出角度3.同样,如果我的鸟在第4点朝向第5点,我需要计算角度6.
这样做的秘诀是什么?
首先,我是C++的新手!所以我有一个标准的对象列表,表示二维空间中的元素,我想做一些基本的碰撞检测.我的第一个想法(来自大多数Java背景......)是将每个对象与另一个对象进行比较,调用一个函数来检查每对或多个对象的交集.这在Java中很简单,取出ArrayList的第一项,将它与第二项,第三项等进行比较,然后取第二项,将它与第三项,第四项等进行比较.这是我采用的方法. C++中的问题,但我使用的是迭代器(而不是像我在Java中那样使用直接元素访问),但是迭代器应该是线性使用的,对吧?所以直接访问不合适.
所以我的问题是如何执行此算法?我也有理由相信这不是做(非常基本的)碰撞检测的最佳方法,所以对此的任何建议也会受到欢迎.这是我的(非工作)代码.
for (list<Box>::iterator p = mBoxes.begin(); p != mBoxes.end(); p++) {
for (list<Box>::iterator q = mBoxes.begin() + p); q != mBoxes.end(); q++) {
if (p->isIntersecting(q)) {
p->changeDirection();
q->changeDirection();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这应该说明我正在尝试的方法,但当然我的尝试mBoxes.begin() + p不起作用!
我有一个方法,我想用rspec和Mocha测试.我的目标是Dir.glob为了只返回一个文件的简单数组.该方法定义如下:
def my_method
Dir.glob("#{upload_dir}/*.pdf").each do |file|
...
end
end
Run Code Online (Sandbox Code Playgroud)
而且测试:
it "ignores a file of no size" do
zero_file = File.expand_path("../fixtures/zero_size_file_12345.pdf", __FILE__)
Dir.expects(:glob).returns([zero_file])
...
end
Run Code Online (Sandbox Code Playgroud)
问题是这个方法upload_dir不是我想在这里测试的,我假设如果我删除了任何调用Dir.glob那么upload_dir就永远不会被调用.如果我在调用Dir.glob和调用之前放入一个调试器Dir.glob,那么我看到我的数组是一个零文件,因此存根肯定是有效的.但是,当测试实际调用该方法时Dir.glob("#{upload_dir}/*.pdf"),它会尝试调用upload_dir.
我使用Ruby 1.9.3,rspec 2.12.0和mocha 0.13.0.