C#的扩展方法非常适合添加语法糖.Java扩展方法非常适合允许库开发人员向其接口添加方法.
我是一个非库Java开发人员,并且知道我将从库中获取新功能获得很多好处,但我仍然希望拥有C#扩展方法的语法糖功能.
这是,或者在未来的Java版本中是否可行?
例如:我想在String类中添加方法...
String data = StringUtils.capitalize("abcd"); // instead of this
String data = "abcd".capitalize() // I would like to do this
Run Code Online (Sandbox Code Playgroud)
请不要专注于这个特定的例子,我只展示了我希望能够实现的功能类.
我有2个AsyncTask,一个用于创建套接字连接,另一个用于使用这些套接字传输对象.我的代码是这样的:
try {
connectat = true;
transmitter = new SocketTransmitter();
transmitter.execute();
connector = new socketConnector();
connector.execute(owner);
this.open();
} catch (IOException e) {
Run Code Online (Sandbox Code Playgroud)
但是,从不创建或执行被AsyncTask调用socketConnector.我试图改变顺序但是然后没有创建或执行发射器......
那有什么不对吗?
我们不能创建构造函数synchronized但可以synchronized在构造函数中编写它.在什么情况下这样的要求会来?我很开心.
package com.simple;
public class Test {
public Test() {
synchronized (this) {
System.out.println("I am called ...");
}
}
public static void main(String[] args) {
Test test=new Test();
System.out.println(""+test);
}
@Override
public String toString() {
return "Test []";
}
}
Run Code Online (Sandbox Code Playgroud) Java HotSpot™虚拟机中的内存管理文档的第6页包含以下段落:
年轻代集合相对频繁地发生并且高效且快速,因为年轻代空间通常很小并且可能包含许多不再被引用的对象.
在一些年轻一代的藏品中存活下来的物品最终会被提升或保留给老一代.参见图1.这一代通常比年轻一代更大,其占用率增长更慢.因此,老一代的收藏品很少,但需要更长的时间才能完成
有人可以在上述陈述中定义" 频繁 "和" 不常见 "的含义吗?我们在谈论微秒,毫秒,分钟,天?
除此之外字节通过消耗只有八个存储位作为对节约了内存的事实,32位的integer。它还有哪些实际用途?我在一篇文章中读到,当我们处理来自网络或文件的数据流时,它很有用。当您处理可能与 Java 的其他内置类型不直接兼容的原始二进制数据时,它们也很有用。任何人都可以用例子来解释这些吗?并说明一些更实际的用途?
我是编程的新手,如果这是一个愚蠢的错误,我很抱歉,但我一直收到这个错误,"CompanyAddress.java:11: error: cannot find symbol System.out.println(testObject.getName(CompanyName));"我不知道我做错了什么.
主要的.
import java.util.Scanner;
public class CompanyAddress
{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
test testObject = new test();
System.out.println("Enter name: ");
String input = scan.nextLine();
testObject.getName(input);
System.out.println(testObject.getName(CompanyName));
}
}
Run Code Online (Sandbox Code Playgroud)
我的test.java
import java.util.Scanner;
public class test
{
String Name;
public String getName(String CompanyName)
{
Name = CompanyName;
return Name;
}
}
Run Code Online (Sandbox Code Playgroud) // parallel processing
int processors = Runtime.getRuntime().availableProcessors();
ExecutorService executorService = Executors.newFixedThreadPool(threads);
final List<String> albumIds2 = new ArrayList<String>();
long start2 = System.nanoTime();
for (final HColumn<String, String> column : result.get().getColumns()) {
Runnable worker = new Runnable() {
@Override
public void run() {
albumIds2.add(column.getName());
}
};
executorService.execute(worker);
}
long timeTaken2 = System.nanoTime() - start2;
Run Code Online (Sandbox Code Playgroud)
我有像上面的例子一样的代码,它创建了一个List<String>专辑ID.该列是来自cassandra数据库的切片.我记录要创建的整个专辑列表所用的时间.
我使用增强的for循环完成了同样的操作,如下所示.
QueryResult<ColumnSlice<String, String>> result = CassandraDAO.getRowColumns(AlbumIds_CF, customerId);
long start = System.nanoTime();
for (HColumn<String, String> column : result.get().getColumns()) {
albumIds.add(column.getName());
}
long timeTaken = System.nanoTime() - start; …Run Code Online (Sandbox Code Playgroud) JSONObject login = new JSONObject();
login.put("Key1", "Value1");
Run Code Online (Sandbox Code Playgroud)
我只是尝试使用键和值对创建一个简单的JSON对象.我得到这个例外" Unhandled exception type JSONException".
Map<String,String> map = new HashMap<String,String>
map.put("key1", "value1");
Run Code Online (Sandbox Code Playgroud)
它们是否都是使用键,值对创建对象的等效方法.在创建需要发送到服务的对象时,这是首选方法.
case1,case2和case3之间有什么区别吗?有没有与绩效相关的优势或劣势?
public class Test {
private String name;
public void action (){
name = doSome(); // case 1
setName(doSome()); // case2
this.name =doSome(); // case3
}
public String doSome(){
return "Hello";
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
}
Run Code Online (Sandbox Code Playgroud) 我试图在java上获取绝对文件路径,当我使用以下代码时:
File f = new File("..\\webapps\\demoproject\\files\\demo.pdf")
String absolutePath = f.getAbsolutePath();
Run Code Online (Sandbox Code Playgroud)
它在32位计算机上提供正确的文件路径
C:\Program Files\Apache Software Foundation\Tomcat6.0\bin\..\webapps\demoproject\files\demo.pdf
Run Code Online (Sandbox Code Playgroud)
但是当我在64位机器上运行相同时它会给出FileNotFound Exception(因为Program Files(x86)),如何获得正确的路径而不管OS位.请有人帮忙吗