我不熟悉java,我最近在看一些同事写的一些令我困惑的代码.这是它的要点:
public response newStuff(//random data inside) {
try {
response or = //gives it a value
log.info(or.toString());
return or;
}
catch ( Exception e) {
e.printStackTrace();
}
finally {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在这里添加finally块真的有什么意义吗?我不能只在catch块中添加返回null,这将执行相同的行为,或者我错了吗?
一些同事说嵌套功能对性能不利,我想问一下这个问题.
让我们说我有这个功能:
function calculateStuff() {
function helper() {
// helper does things
}
// calculateStuff does things
helper();
}
Run Code Online (Sandbox Code Playgroud)
helper是一个私有函数,仅在calculateStuff中使用.这就是我想在calculateStuff中封装它的原因.
这比表现更糟糕吗?
function helper() {
}
function calculateStuff() {
helper();
}
Run Code Online (Sandbox Code Playgroud)
请注意,在第二种情况下,我将助手暴露给我的范围.
好的,代码非常基本.由于我使用多个线程,并且我想要它们之间的共享变量,我使用全局.
当我点击"C"时,为什么ThreadClass中的代码有时不会执行?我知道这是一个并发问题,但我不确定如何解决它.我已经阅读了信号量并最近锁定了,但我现在还不确定如何实现它.欢迎任何建议.
import threading
buff_list = []
class ThreadClass(threading.Thread):
global buff_list
def run(self):
while (True):
if ("C" == raw_input()):
buff_list.append("C")
print buff_list
class ThreadClass2(threading.Thread):
global buff_list
def run(self):
while(True):
if ("B" == raw_input() and len(buff_list) > 0):
buff_list.pop()
print buff_list
a = ThreadClass()
b = ThreadClass2()
a.start()
b.start()
Run Code Online (Sandbox Code Playgroud) 假设我有一个带有多个String字段的java对象.
public class Person {
private String field1
// keeps going
Run Code Online (Sandbox Code Playgroud)
我希望能够根据我选择的任何领域对人员列表进行排序.
我知道我可以使用比较器接口并实现多个compareTo,如主题所述:如何在一个类中制作2个可比较的方法?
但在使用时 Collections.sort()
但是,如果没有所有这些重复的代码,我有什么方法可以做到这一点吗?
我目前有这段代码:
Map<Site, LinkedList<Site.Hosts.Host>> map = new HashMap<Site, LinkedList<Site.Hosts.Host>>();
for (PerformanceCounter element : pc) {
Site s = new Site();
s.id = Short.parseShort(element.getSite_id());
s.name = element.getSite_name();
s.location = element.getSite_location();
Site.Hosts.Host h = new Site.Hosts.Host();
h.id = Short.parseShort(element.getHost_id());
if (!map.containsKey(s)) {
map.put(s, new LinkedList<Site.Hosts.Host>());
} else {
map.get(s).add(h);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在阅读的 PerformanceCounters 列表是:
1, C-01, New York, 1001
1, C-01, New York, 1002
1, C-01, New York, 1003
Run Code Online (Sandbox Code Playgroud)
其中 101 是 ID,C-01 是名称,纽约是位置。
不幸的是,我的代码为我的地图创建了 3 个键值。
我无法生成 1 个键和 3 个值LinkedList …
基本上,我想要一个方法:
public void setArgs(String... vals)
{
for (String s: vals)
// Here I can add s every string passed to an array list
Run Code Online (Sandbox Code Playgroud)
我想知道的是:我可以简单地存储传递给setArgs数组的所有参数,而不是困扰一个ArrayList?我知道数组在java中是不可变的,所以我想知道你是否可以以某种方式提取参数而不使用a loop.
谢谢.
我知道将arraylist转换为数组的代码是:
private String[] arrayLst_to_array(ArrayList<String> al) {
String[] arr = new String[al.size()];
arr = al.toArray(arr);
return arr;
}
Run Code Online (Sandbox Code Playgroud)
但我希望我的新数组在开始时有一个字符串,然后在那之后,我想要其余的arraylist.
我知道我可以将我想要的字符串添加到arraylist的开头,然后转换它,但是有更有效的方法吗?
让我们说我有一个java方法:
public void setStuff(String... stuff)
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法让我知道传递的字符串数量,而不使用循环来测试它?
我基本上想知道传递了多少个字符串,所以我可以简单地制作一个这样大小的数组.
我知道在 Java 中大多数人使用以下方式声明列表:
List l = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
但这和之间有什么区别
AbstractList l = new ArrayList();
Run Code Online (Sandbox Code Playgroud)
在这个特定实例中,使用接口相对于抽象类有哪些优点?
让我们说我有这个功能:
function toy(input) {
return input + 1;
}
Run Code Online (Sandbox Code Playgroud)
我想基本上生成一个函数,通过将3绑定到输入来打印4.所以我可以调用类似fn()的东西,它会打印4.
所以我试着这样做:
var fn = toy.bind(3);
Run Code Online (Sandbox Code Playgroud)
然后当我执行fn()时,我没有得到4.
我是否需要使用'this'才能使这项工作/有没有办法在没有绑定的情况下做到这一点?
我最近一直在阅读单身人士,我常常看到如下代码:
private static SingletonDemo instance = null;
Run Code Online (Sandbox Code Playgroud)
在Singleton类中作为一个字段.
我不想特别了解'静态'在做什么以及为什么需要它.
我在这里阅读了Oracle网站.并且他们使用a numOfBicycles(这是你有多个自行车的时候)的例子来证明使用静态字段,但我认为我正在理解为什么在你只是实例化1个实例时使用它.