[英]Java-like code (maps, function pointers)
我需要做類似以下代碼的事情:
#include <iostream>
#include <map>
using namespace std;
typedef char (*intfunction)() ;
char a(){
return 'a';
}
char b(){
return 'b';
}
int main() {
map<char, intfunction> mapita;
mapita['a'] = &a;
mapita['b'] = &b;
cout << mapita['a']()
<< mapita['b']();
return 0;
}
事實上,我對Java並不十分了解,所以我正在尋找一些幫助。
有沒有可能的方法來模擬或執行與上面的代碼相同的方法? 我看到了一些帶接口等的例子,但是無法以相同的方式工作。
看看這段代碼:
import java.util.HashMap;
import java.util.Map;
public class test2 {
interface Test {
public String method();
}
public static void main(final String[] arg) {
final Map<String, Test> map = new HashMap<String, Test>();
map.put("a", new Test() {
@Override
public String method() {
return "aaa";
}
});
map.put("b", new Test() {
@Override
public String method() {
return "bbb";
}
});
System.out.println(map.get("a").method());
System.out.println(map.get("b").method());
}
}
我能想到的唯一真正的潛在解決方案是可運行對象的映射:
public void doSomething() {...}
//elsewheres
Map<String, Runnable> map = new HashMap<>();
//Java 7
map.put("test", new Runnable() { doSomething(); });
//Java 8
map.put("test", () -> { doSomething(); });
要么是這個,要么是為對象實現公共接口的類(如果需要一些返回值)。
語法可能有點偏,但是
import java.utils.HashMap;
class CharHolder {
private char myChar;
CharHolder( char someChar ) {
myChar = someChar;
}
char getChar() {
return myChar;
}
public static void main(String[] args) {
HashMap<Character, CharHolder> mapita = new HashMap<>();
mapita.put( 'a', new CharHolder('a') );
mapita.put( 'b', new CharHolder('b') );
System.out.println( mapita.get('a').getChar() + " " + mapita.get('b').getChar() );
}
}
輸出應為:ab
我想使用OOP解決方案來實現您想要的行為。
正如您的代碼所示,您希望調用不同的方法來調用不同的密鑰。 這個場景完全匹配工廠設計模式 ,所以我創建了一個工廠,根據傳入的密鑰返回方法實例。然后我將函數抽象到接口BaseMethod 。 然后,您可以創建實現接口的類,以便在業務增長時實現相同的方法簽名。
import java.util.HashMap;
import java.util.Map;
interface BaseMethod {
public void run();
}
class HelloWoldMethod implements BaseMethod {
public void run() {
System.out.println("Hello world");
}
}
class MethodFactory {
private static MethodFactory ins = null;
private final static Map<String, BaseMethod> map = new HashMap<String, BaseMethod>();
private MethodFactory() {
map.put("hello", new HelloWoldMethod());
}
public static BaseMethod getMethod(String key) {
if (null == ins) {
ins = new MethodFactory();
}
return map.get(key);
}
}
public class Test {
public static void main(String [] args) {
BaseMethod ins = MethodFactory.getMethod("hello");
if (null != ins) {
ins.run();
} else {
System.out.println("no method found");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.