Experimental Physics and Industrial Control System
|
Dear all
Just a quick note on this discussion...
Thanks, Xuan, for putting this topic on our radar over here
at PSI. Also to Lewis for the documentation fixes that he
recently submitted to the library.
We will look at ways of improving the API and/or of making
sure that the README file offers more explicit guidance
for performing get/put bulk operations.
Best regards
Simon Rees
PSI Controls Developer
On 23.01.20 07:26, 吴煊 via Tech-talk wrote:
Hi Lewis,
Thanks for your reply. Could you give me an elegant way of example to call put method. It seems like that I need to create channel for 300 times by what you said.
Cheers,
Xuan
在 2020-01-23 06:01:00,"J. Lewis Muir" <[email protected]> 写道:
On 01/22, 吴煊 via Tech-talk wrote:
My question is how to use each channel to put value? I've not found any example. I have tried: channels.get(0).put("test"), it's not correct.(error info:The method put(capture#1-of ?) in the type Channel<capture#1-of ?> is not applicable for the arguments (String))
That put method is just going to be awkward to use when the type of the
object it's called on is Channel<?> (i.e., a Channel of some type).
There are some other methods on Channel that you could call without
trouble, but put(T) will be problematic because its argument is of type
T and the object you're calling it on is a Channel of some type, not
necessarily type T. If you have to call that method, the best you can
do is cast the Channel<?> object to the correct type, Channel<String> in
your example:
(Channel<String>(channels.get(0))).put("test");
But that's ugly, and you're throwing away all of the benefits of
generics (e.g., type safety and expressiveness). You'd also have to add
a @SuppressWarnings("unchecked") annotation to the method, or change
the code to a local variable assignment and put the annotation on the
variable, to get rid of the compiler warning.
So, I'd say that you'd be better off not trying to call that put(T)
method like that. Instead, stick to only calling methods on those
channels that you can call in a type-safe way.
If you really need some way to do what you're trying to do, you'd
probably want something added to the ca API to help with that.
If you have to do it yourself, though, you could create your own
container object that could hold Channel instances and that could
provide a get and put method that took a type token. Then, assuming
"channels" was an instance of this container object, your example could
become something like this:
channels.put(0, String.class, "test");
Of course, there are various designs you could come up with.
Lewis
- References:
- usage of Java Channel Access Client 吴煊 via Tech-talk
- Re: usage of Java Channel Access Client J. Lewis Muir via Tech-talk
- Re:Re: usage of Java Channel Access Client 吴煊 via Tech-talk
- Navigate by Date:
- Prev:
Re: Getting images from area detector plugins Wang Xiaoqiang via Tech-talk
- Next:
Re: CAS-client thread issues in areaDetector IOC Wlodek, Jakub via Tech-talk
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
<2020>
2021
2022
2023
2024
- Navigate by Thread:
- Prev:
Re:Re: usage of Java Channel Access Client 吴煊 via Tech-talk
- Next:
Oxford IC101 support? Mark Rivers via Tech-talk
- Index:
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
<2020>
2021
2022
2023
2024
|
ANJ, 24 Jan 2020 |
·
Home
·
News
·
About
·
Base
·
Modules
·
Extensions
·
Distributions
·
Download
·
·
Search
·
EPICS V4
·
IRMIS
·
Talk
·
Bugs
·
Documents
·
Links
·
Licensing
·
|