这是我如何做一个while循环:
boolean more = true;
while (more)
{
// do something
if (someTest())
{
more = false;
}
}
Run Code Online (Sandbox Code Playgroud)
这是非常标准的.我很想知道是否有办法在Java中执行类似下面的代码:(我想我在C中看到过类似的东西)
// The code below doesn't compile (obviously)
while (boolean more = true)
{
// do something
if (someTest())
{
more = false;
}
}
Run Code Online (Sandbox Code Playgroud)
我只问这个,因为目前我不喜欢我在循环范围之外定义条件中使用的变量(在这种情况下:"more")的方式,即使它只在循环内部相关.循环结束后,它没有任何意义.
**更新**
在参观了Porcaline密室后,我想到了一个想法:
for (boolean more=true; more; more=someTest())
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
它并不完美; 它正在滥用for循环,我无法想到至少执行一次循环的方法,但它已经接近了......有没有办法确保循环执行1次以上?
我有一个名为tester的表,我需要在该表上覆盖一个临时表才能进行一些测试。到目前为止,我已经使用以下方法进行了管理:
CREATE TEMPORARY TABLE tester AS
SELECT * FROM tester WHERE name='bananas';
Run Code Online (Sandbox Code Playgroud)
这个临时表将在会话结束时消失,这对我来说很好,但是由外部应用程序负责连接,并且它倾向于缓存连接以供重用(因此无法保证临时表具有已删除)。这意味着,如果我再次尝试执行上述查询,则可能会失败,因为临时表仍然存在。
显式删除临时表并不是真正的选择。我宁愿接受失败的查询,也不要冒险误删除底层的“真实”表。
我会做的是只创建临时表,如果它不存在。我确实找到了这个查询,人们在检查表是否存在时应该使用该查询:
SELECT * FROM pg_catalog.pg_class WHERE relkind = 'r' AND relname = 'tester';
result when temporary table exists:
relname | relnamespace | reltype | relowner | relam | relfilenode | reltablespace | relpages | reltuples | reltoastrelid | reltoastidxid | relhasindex | relisshared | relkind | relnatts | relchecks | reltriggers | relukeys | relfkeys | relrefs | relhasoids | …
Run Code Online (Sandbox Code Playgroud) 我很困惑为什么不允许以下内容:
public interface MyInterface {
MyInterface getInstance(String name);
}
public class MyImplementation implements MyInterface {
public MyImplementation(String name) {
}
@Override
public static MyInterface getInstance(String name) { // static is not allowed here
return new MyImplementation(name)
}
}
Run Code Online (Sandbox Code Playgroud)
我理解为什么接口中的方法不能是静态的,但为什么不能覆盖这个方法呢?
我希望所有类都实现该getInstance(String name)
方法,但是我目前仅限于只有在对象已经被实例化时才能调用该方法哪种类型会失败...
*更新:*感谢您的回答,我现在明白了.基本上我不应该试图使实用程序类(或工厂类)实现一个接口(或至少,不是这样)...