标签: method-parameters

如何使用反射在Java 8中获取方法参数名称?

Java 8能够使用Reflection API获取方法参数名称.

  1. 如何获取这些方法参数名称?

  2. 据我所知,类文件不存储正式的参数名称.我如何使用反射获得这些?

java reflection method-parameters java-8

33
推荐指数
4
解决办法
3万
查看次数

方法参数在Java中是否安全?

Class Shared{    
     public void sharedMethod(Object o){
          //does something to Object
     }     
}

//this is how threads call the shared method
run(){
     sharedInstance.sharedMethod(someObject);
}
Run Code Online (Sandbox Code Playgroud)

现在将o作为参数传递给方法.多个线程并行调用相同的方法.我们可以安全地说这段代码是线程安全的吗?

有两种情况:

  • 如果someObject在线程之间共享
  • 如果每个Thread都有自己的副本 someObject

java multithreading thread-safety method-parameters

14
推荐指数
1
解决办法
6117
查看次数

Ehcache自动密钥生成和@Cacheable spring注释

有谁知道Ehcache的默认密钥生成是如何工作的?如果我有以下方法:

@Cacheable(cacheName = CACHE_KEY) // CACHE_KEY is static final field.
public List<DataObject> list(
    int firstRecord, int maxRecords, int pageSize, FilterObject filter) {
    ....
}
Run Code Online (Sandbox Code Playgroud)

哪里FilterObject是自定义POJO,我应该期望什么是实际的缓存键?

我观察的是当使用不同的FilterObject实例而不更改我的方法调用的其他参数时,它总是产生相同的结果 - 第一个调用的结果被缓存并返回.

可能是FilterObject导致行为的POJO - 我认为它是一些序列化或.toString()问题,因为我没有覆盖相关方法.

我仍然无法找到有关如何在Ehcache的网站和@Cacheable注释文档中形成此类方法的缓存密钥的确切信息.我很感激有关此主题的任何信息和建议.

java spring ehcache pojo method-parameters

11
推荐指数
2
解决办法
2万
查看次数

有没有办法让参数变为var而不是val?

在Java中调试命令行参数处理时,我习惯这样做

args = new String[] { "some", "new", "arguments" };
Run Code Online (Sandbox Code Playgroud)

(如果您经常更改文件名作为参数,但不想在IDE中浏览某些对话框窗口,则特别有用).这样做的好处是我可以在构建版本时简单地注释掉该行.

因此,当我在Scala中尝试这个时,我发现参数是vals.(我不能var在参数前面写).

  • Q1:这个的理由是什么?
  • Q2:除了这样做之外,有没有明显的解决方法

    val newArgs = if (...) args else Array("some", "new", "arguments")
    
    Run Code Online (Sandbox Code Playgroud)

    并坚持newArgs剩下的主要方法?

scala command-line-arguments method-parameters

9
推荐指数
1
解决办法
6186
查看次数

在方法(Java 中)中改变对象参数是一种不好的做法吗?

我有一个关于改变方法中的方法参数(它们是对象)的问题。

我多次阅读和听到,在作为参数传入的方法中改变对象是一种不好的做法。例如:

public void modifyList(List<Object> list) {
    list.add(new Object());
}
Run Code Online (Sandbox Code Playgroud)

相反,应该复制传入的对象,应该对复制的对象执行突变,然后返回复制的对象。例如:

public List<Object> getModifiedList(List<Object> list) {
    List copy = new List<Object();
    //Make a deep copy if it would be necessary
    for(Object o : list) {
        copy.add(o.clone());
    }
    //Modify the copy
    copy.add(new Object());
    //return the copy
    return copy;
}
Run Code Online (Sandbox Code Playgroud)

我知道第二种方法产生副作用的可能性较小,因为它不会改变输入参数。

但这真的是正确的方法吗?由于必须创建大量深层副本,性能会受到影响。此外,为所有类实现复制构造函数和克隆方法会花费大量时间。它还会极大地增加LOC。

在实践中,我不经常看到这种模式(复制方法参数)。

有丰富经验的人(作为程序员/软件开发人员工作多年)可以回答这个问题吗?

问候马维林

java copy method-parameters

9
推荐指数
2
解决办法
1万
查看次数

如何以任何顺序使用PHP函数或方法参数?

让我们说我用这样的方法定义类:

class Test {
    public function doStuff($a, $b, $c) {
    // -- Do stuff --
    }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用此方法,但参数的顺序不同,如下所示:

$test = new Test();
$test->doStuff($b, $c, $a);
Run Code Online (Sandbox Code Playgroud)

它们的名称相同,但顺序不同.

我看到Symfony2可以使用其调度程序执行此操作,您可以按任何顺序使用参数.链接:Symfony2控制器可以做到这一点

问题是,如何使这项工作?Symfony2如何调用适当的动作控制器,然后可以按照您喜欢的任何顺序接受参数?

编辑:我不能使用数组,我知道php不使用命名参数.但不知何故,Symfony2设法做到了.

php symfony method-parameters

6
推荐指数
1
解决办法
1913
查看次数

应如何处理 iOS 版本特定的 UIApplicationDelegate 协议方法参数类型?

在 iOS 12 中,UIApplicationDelegate 协议定义:

- (BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(nonnull void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
Run Code Online (Sandbox Code Playgroud)

而在以前的 iOS 版本中,这是定义的:

- (BOOL) application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler
Run Code Online (Sandbox Code Playgroud)

这些定义的不同之处在于restoreHandler 的参数类型。因此,在 Xcode 10 中,我们现在收到警告:

'application:continueUserActivity:restorationHandler:' 实现中参数类型冲突:'void (^ _Nonnull __strong)(NSArray> * _Nullable __strong)' 与 'void (^__strong _Nonnull)(NSArray *__strong)'

我仍在致力于可能在 iOS 12 之前发布的更新,但我也在为支持 iOS 12 奠定基础。我不确定如何跨多个 iOS 版本处理不同的参数类型。

通常在一个方法中,我会使用类似 @available 的东西来根据运行时检测到的 iOS 版本来分支代码,但在这种情况下,我不知道最佳实践是什么。我当然不想为此而烦恼!我是否应该避免更改任何内容并接受警告,直到 Xcode 10 结束测试版并且我要提交 iOS 12 版本?那么它会在运行时向后兼容较低的 iOS 版本吗?

感谢您的任何帮助!

uiapplicationdelegate ios method-parameters ios12

5
推荐指数
0
解决办法
1368
查看次数

如何将数组转换为方法的参数?

我需要将params(比如:)传递'param1', 'param2', 'param3'给方法......但我有一系列参数(如:)array('param1', 'param2', 'param3').如何将数组转换为参数?

function foo(array $params) {

    bar(
        // Here should be inserted params not array.
    );

}
Run Code Online (Sandbox Code Playgroud)

php arrays parameters method-parameters

4
推荐指数
1
解决办法
3187
查看次数

Java:获取所有方法参数作为对象数组

是否有可能做到这一点:

void foo(Bar b, FooBar fb){
    Object[] args=getArgs() //Contains the parameters b & fb
}
Run Code Online (Sandbox Code Playgroud)

如果是,如何?

(不知道名字和参数个数)

java syntax method-parameters

3
推荐指数
1
解决办法
4461
查看次数

python - 为方法创建一个动态参数列表

我想在python中创建一个XLSX文件.为此,我使用xlsxwriter.

在我的XLSX中,我想用write_rich_string方法突出显示文本的某些部分.

但是,我的字符串不是固定值.我要突出显示的部分可以随机放入其中.或者我可以将文本的倍数部分加以突出显示.

那么,我可以为write_rich_string的调用创建一个"参数列表"吗?制作它的方法是什么?

例:

mystring = "I want this in [tag_1]yellow[/tag_1] and this in [tag_2]green[/tag_2]."

worksheet.write_rich_string('A1',
                        'I want this in',
                        yellow, 'yellow',
                        ' and this is ',
                        green, 'green')

worksheet.write_rich_string('A1', my_list_of_parm)
Run Code Online (Sandbox Code Playgroud)

python method-parameters xlsxwriter

2
推荐指数
1
解决办法
3140
查看次数

使用与类型参数匹配的 Scanner.nextX 读取类型参数值列表

与此相关的帖子太多了,我认为参考它们无济于事,但是如果人们发现特别有用的帖子,将它们添加到这里会很棒。

  ArrayList<Integer> readIntegersFrom(Scanner scnr) {
      ArrayList<Integer> lst = new ArrayList<Integer>();
      while (scnr.hasNext()) {
         lst.add(scnr.nextInt());
      }
      return lst;
   }
Run Code Online (Sandbox Code Playgroud)

整数出现在 4 个地方:

  1. 方法的名称
  2. ArrayList 返回类型的 Type 参数
  3. lst 类型的 Type 参数
  4. 创建新列表的 Type 参数

到现在为止还挺好。但是,我的程序将这个方法复制了四次(我敢肯定,还会有更多),每个都有不同的类型参数和 Scanner 方法。(例如,ArrayList<Double>scnr.nextDouble()。)

我不怀疑我混淆了我使用过的许多其他语言的想法和技术,但是有什么方法可以概括这种方法,所以我可以告诉它我想要一个 ArrayList,比如说,Double,它应该使用 Scanner .nextDouble()?这个问题的两个部分是 (a) 传达 ArrayList 的类型参数和 (b) 传达要使用的 Scanner 方法。

我会满足于指定或推导类型参数的单一方法,并有一个枚举参数来告诉扫描器使用哪种方法,尽管这两个方法是直接连接的。

java generics method-parameters

1
推荐指数
1
解决办法
38
查看次数

应使用 lambda 删除未使用的方法参数 (squid:S1172) 误报

我有一个使用参数作为 lambda 表达式的工作方法

private BiConsumer<List<String>, Properties> handleList(Properties p) {
    return (list, prop) -> executeSubList(list, prop);
}
Run Code Online (Sandbox Code Playgroud)

因为p我收到了来自 SonarLint 的误报警告

Unused method parameters should be removed (squid:S1172)
Run Code Online (Sandbox Code Playgroud)

如果我更改prop为,p则会出现编译错误

Lambda 表达式的参数 p 无法重新声明封闭范围内定义的另一个局部变量

使用方法参数作为 lambda 参数时是否存在真正的问题或者是否存在误报检查?

java lambda false-positive method-parameters sonarlint

-1
推荐指数
1
解决办法
2535
查看次数

Java - 方法参数,String后跟List

我有一个接受a StringString<List>as方法参数的Java方法.如何区分String和不属于List?

方法:

void returnValues(String sensor, List<String> attributes)
Run Code Online (Sandbox Code Playgroud)

呼叫:

nexaConnect.returnValues(Arrays.asList("19455746", "blobJson", "deviceMfg", "eventCode", "sensorClass", "sensorUUID", "timeStamp", "uID"));
Run Code Online (Sandbox Code Playgroud)

我能看到的唯一可能的工作是删除第一个String并在List中包含值,然后获取列表的第一个值并以这种方式使用它.有没有办法将它们分开,以便它不是列表的一部分?

java list arraylist parameter-passing method-parameters

-2
推荐指数
1
解决办法
66
查看次数